event-bus 事件总线

本文介绍了如何创建一个简单的EventBus类,用于在不同文件和组件之间进行通信。通过实例化EventBus,可以注册监听器(on)并在合适的时候触发(emit)事件,如navclick事件,使得不同模块能协同工作。

事件总线:event-bus,跨文件、跨组件进行通信。

手写事件总线:

// 创建 EventBus 事件总线类
class EventBus {
	constructor() {
		this.eventMap = {}
	}

	// 保存 on 方法中的 callback 回调函数
	on(eventName, callback) {
		let eventCallbacks = this.eventMap[eventName]
		!eventCallbacks && (eventCallbacks = [])
		eventCallbacks.push(callback)

		this.eventMap[eventName] = eventCallbacks
	}

	// 一旦 emit 发出事件,就根据 eventName 找到对应的被保存的 callback 回调函数依次执行
	emit(eventName, ...args) {
		const eventCallbacks = this.eventMap[eventName]
		if (!eventCallbacks) return

		eventCallbacks.forEach(callback => callback(...args))
	}
}
// 实例化 EventBus 事件总线类的对象
const eventBus = new EventBus()

// 在 content.js 中监听 navclick 事件
eventBus.on('navclick', (name, age) => {
	console.log('navclick listener1', name, age)
})
eventBus.on('navclick', (name, age) => {
	console.log('navclick listener2', name, age)
})

// 在 nav.js 中发出 navclick 事件
eventBus.emit('navclick', 'Lee', 18)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值