在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)
}
}