EventBus是一个用于组件间通信的库,它基于发布/订阅模式,允许不同组件或模块之间通过事件来通信,而无需直接引用彼此;
class EventBus {
events: any;
constructor() {
this.events = {};
}
// 订阅事件
on(eventName: string, listener: (...args: any[]) => void): void {
if (!this.events[eventName]) {
this.events[eventName] = [];
}
this.events[eventName].push(listener);
}
// 取消订阅事件
off(eventName: string, listener: (...args: any[]) => void): void {
if (!this.events[eventName]) return;
this.events[eventName] = this.events[eventName].filter((cb: () => void) => cb !== listener);
// 如果没有任何订阅者,则删除该事件
if (this.events[eventName].length === 0) {
delete this.events[eventName];
}
}
// 触发事件
emit(eventName: string, ...args: any[]) {
if (!this.events[eventName]) return;
this.events[eventName].forEach((callback: (...args: any[]) => void): void => {
callback(...args);
});
}
// 获取事件订阅者数量(可选)
getEventListenersCount(eventName: string) {
return this.events[eventName] ? this.events[eventName].length : 0;
}
}
// 使用示例
const AzEventBus: any = new EventBus();
export default AzEventBus;