【问题标题】:Fire event when $emit is complete$emit 完成时触发事件
【发布时间】:2020-09-12 09:33:24
【问题描述】:

我有一个父组件,其中有一个子组件。当在子项中单击一个按钮时,它会返回给父项:

   clickevent(data){
            this.$emit('back-to-parent', data);

  }

我的困境是我需要知道发射何时完成,以便我可以执行依赖于它的代码。我试过这个:

        clickevent(data){
           this.$emit('back-to-parent', {data, done: () => { 
                 alert('done') 
             } });
       }

但我的警报永远不会触发。我试过这些,但它们不起作用https://forum.vuejs.org/t/do-something-after-emit-has-finished-successful/10663

我的发射完成后如何执行代码?谢谢

【问题讨论】:

  • 你应该在父组件完成发射事件后手动调用done回调
  • 我不知道该怎么做。
  • 你尝试过 nextTick 吗?

标签: vue.js


【解决方案1】:

在父组件中:

@back-to-parent="onBackToParent"
...
methods: {
  onBackToParent({ data, done }) {
    // process data
    if (done) {
      done()
    }
  }
}

在子组件中:

clickevent(data){
           this.$emit('back-to-parent', {data, done: () => { 
                 alert('done') 
             } });
       }

【讨论】:

  • 是的!这正是我想要的。谢谢