介绍
事件总线主要是用来完成兄弟组件之间通信的,它是基于发布订阅模式来实现的。定义的vue实例作为信号中心,注册事件$on()
方作为订阅者,触发事件$emit()
方作为发布者
模拟
class EventEmitter {
constructor() {
// 存储事件与处理函数的对应关系
this.subs = {}
}
//第一个参数为事件名称
//第二个参数为处理函数
$on(eventType, fn) {
if (!this.subs[eventType]) {
this.subs[eventType] = []
}
this.subs[eventType].push(fn)
}
$emit(eventType) {
if (this.subs[eventType]) {
this.subs[eventType].forEach((handler) => {
handler()
})
}
}
}