优秀的编程知识分享平台

网站首页 > 技术文章 正文

Vue全局事件busEvent,一次点击触发多次事件问题

nanyue 2024-08-15 08:07:28 技术文章 5 ℃

有时在开发时如果通信比较麻烦或许会用到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的生命周期图

最近发表
标签列表