事件总线的原理




自己实现的事件总线
const listeners = {};
export default {
$on(eventName, handler) {
if (!listeners[eventName]) {
listeners[eventName] = new Set();
}
listeners[eventName].add(handler);
},
$off(eventName, handler) {
if (!listeners[eventName]) {
return;
}
listeners[eventName].delete(handler);
},
$emit(eventName, ...args) {
if (!listeners[eventName]) {
return;
}
for (const handler of listeners[eventName]) {
handler(...args);
}
},
};
利用vue实现的总线
import Vue from "vue";
/*
* 事件名:mainScroll
* 含义:主区域滚动条位置变化后触发
* 参数:
* - 滚动的dom元素
*/
Vue.prototype.$bus = new Vue({});