停止接收来自被破坏的子组件的事件

2024-04-24

我有一个父级,我可以在其中动态添加子组件。

当在挂载中添加子组件时,我为事件注册一个侦听器

EventBus.$on('content-type-saving', function() {
    logic here...
}

问题是,当通过从子组件数组中删除该组件而在父组件中删除该组件时,该组件仍然会触发并且其内部的代码会运行。

我怎样才能防止这种情况发生?我试过这个

    beforeDestroy() {
      //do something before destroying vue instance
        EventBus.$off('content-type-saving')
    }

但这也关闭了所有其他子组件的该事件,因此那些仍然存在的子组件将不再执行逻辑操作,因为我关闭了被破坏的子组件中的事件。

我认为如果我关闭一个事件,它只会影响该子组件的该事件的侦听,而不会打开所有子组件的事件。

如何阻止被破坏的组件对事件做出反应?


你打电话时$off仅包含活动名称,all听众被删除 https://v2.vuejs.org/v2/api/#vm-off对于指定的事件。

相反,您只想删除正在侦听的组件的事件。你的组件应该看起来像这样:

const component = {
  methods:{
    listener(){
      //do something on event
    }
  },
  created(){
    EventBus.$on('content-type-saving', this.listener)
  },
  beforeDestroy(){
    EventBus.$off('content-type-saving', this.listener)
  }
}

这将仅删除当前组件的特定侦听器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

停止接收来自被破坏的子组件的事件 的相关文章

随机推荐