2

我正在构建“撤消删除”的逻辑 - 操作。为此,我使用事件总线将事件发送到两个不相关的组件,如下所示:

Undo.vue:

`EventBus.$emit(`confirm-delete-${this.category}`, this.item.id);`

event( this.category) 的名称基于来自 parent ( ConfirmDeleteModal.vue) 的 props,然后接收如下:

CategoryA.vue

created() { EventBus.$on('confirm-delete-category-a', (id) => { this.confirmDelete(id); });

CategoryB.vue

created() { EventBus.$on('confirm-delete-category-b', (id) => { this.confirmDelete(id); });

我的问题:由于某种原因,事件 forcategory-a被发出和接收两次category-b工作正常)。我必须不断收听confirm-event,因此在收到事件或仅收听后我无法删除事件监听器$once。任何想法如何解决这个问题(也许使用 Vuex)?谢谢!

4

1 回答 1

6

我也面临同样的问题,然后经过一些研究,我得到了这个解决方案。

您已在应用程序中定义了两次组件(CategoryA.vue),这导致函数运行两次,在本例中为 CategoryA.vue

解决方案:你必须在 created() 之后调用destroy() 就像,

created() {
    EventBus.$on('confirm-delete-category-a', (id) => {
      this.confirmDelete(id);
    }),
 destroyed() {
            EventBus.$off('confirm-delete-category-a');
        },
于 2021-03-19T07:21:44.650 回答