2022年7月

在vue3 async setup中 expose 和一些生命周期钩子的注册需要在第一个await 之前,但是也有在await之后调用的方法。

示例如下:

async setup(props,{expose}){
	const instance = getCurrentInstance();
	const exposeObj = {};
	//先把这个空对象expose出去
	expose(exposeObj);
	//模拟异步操作
	const result = await new Promise((resolve)=>{
		setTimeout(()=>resolve(2),2000);
	});
	//注册生命周期钩子时,第二个参数传入instance
	onMounted(()=>{
			console.log('我挂载啦!')
	},instance)

	onUnmounted(()=>{
		console.log('我卸载啦!')
	},instance)
	//后续再添加expose的属性和方法
	exposeObj.attr = result ;
	exposeObj.func = function(){
		console.log('some exposed function.',result)
	}
	
}