在应用 vue 事件总线执行 $emit("someEvent")
时,事件总线 $on 回调函数中 this.$refs.someComponent
报错,提醒 someComponent 组件不存在。
起因是在组件切换时 someComponent 已销毁,然而对应的事件监听还存在,导致起初 emit 到了历史蕴含已销毁组件的事件函数。
解决办法是在应用事件总线时及时在组件beforeDestroy
(销毁),同时革除掉对应注册的事件 eventBus.$off('someEvent')
。
mounted () {eventBus.$on('someEvent', () => { // 执行 someComponent 中的 doAddList
this.$refs.someComponent.doAddList(...);
});
},
beforeDestroy () {eventBus.$off('someEvent')
},