新建useEventEmitter.ts文件
class EventEmitter {
private events: { [key: string]: Set<(...args: any[]) => void> } = {}
subscribe(eventName: string, listener: (...args: any[]) => void): void {
if (!this.events[eventName]) {
this.events[eventName] = new Set()
}
this.events[eventName].add(listener)
}
unsubscribe(eventName: string, listener: (...args: any[]) => void): void {
if (this.events[eventName]) {
this.events[eventName].delete(listener)
}
}
emit(eventName: string, ...args: any[]): void {
if (this.events[eventName]) {
this.events[eventName].forEach(listener => listener.apply(this, args))
}
}
clear(): void {
this.events = {}
}
}
export default EventEmitter
使用方法
import EventEmitter from '~/hooks/useEventEmitter'
const events = EventEmitter
const listener = (...args: any[]) => {
console.log('Event triggered', ...args)
}
emitter.subscribe('myEvent', listener)
emitter.unsubscribe('myEvent', listener)
events.clear()