我有一个对话框组件,它在提交时执行两个异步函数。我的目标是保持对话框打开并显示加载状态,直到两个函数都完成。完成后,我想关闭对话框。
我的submit函数是在父组件中定义的,如下所示:
async submit() {
await this.foo1();
await this.foo2();
}
此函数作为prop传递给对话框组件:
<app-dialog @submit="submit" />
在我的对话框组件中,单击按钮时,我尝试执行以下操作:
async onClick() {
await this.$emit('submit');
this.closeDialog();
},
但是,对话框会立即关闭,而不是等待提交执行。实现这一点的最佳方法是什么?
2条答案
按热度按时间lmyy7pcs1#
我设法通过在对话框组件中传递回调找到了解决方案:
然后在父组件上使用
@submit="submit"
,并将“submit”定义为:但一定有比这更好的解决办法!
ru9i0ody2#
对于这类问题,还有一种替代模式,即将回调函数作为prop传递。
在对话框组件上:
然后,在父组件中:
请记住一些事情
1.在哪里处理承诺是很重要的,例如,如果你想在出错的情况下保持模态打开,你可以在模态组件中进行错误处理,或者至少将一些错误转发给它。
1.进一步研究函数的验证是值得的,例如检查它是否真的返回了一个承诺,然后等待它,否则做其他事情。
1.即使只是一点点,这种模式也会给您的解决方案增加一些耦合,因此您不希望用回调函数替换所有事件!