有时在开发时如果通信比较麻烦或许会用到busEvent
// 定义方式 busEvent.js
import Vue from 'vue'; export default new Vue();
//使用
import busEvent from 'busEvent.js'; busEvent.$emit([eventName, callBack]); // 发送事件 busEvent.$on([eventName], callBack); // 监听事件 busEvent.$off([eventName]); // 销毁监听的事件 触发的顺序是先监听$on==>$emit(手动触发)==>$off(手动销毁)
全局定义的事件是不会跟随组件的生命周期函数进行状态改变的。切换路由时,如果不手动清除事件的话,它会注册多次
created() { this.bus.$off('clickBus'); // 在每次创建事件之前,手动清除定义的事件 //(根据实际的业务需求也可以在beforeDestroy()和destroyed()) }, mounted(){ this.bus.$on('clickBus', (e) => {}); }
作者优大解决方案:https://github.com/vuejs/vue/issues/3399
最后贴出一张vue的生命周期图