31 lines
658 B
JavaScript
31 lines
658 B
JavaScript
// 极简事件总线(避免引入额外依赖)
|
|
|
|
const listeners = new Map()
|
|
|
|
export function on(event, handler) {
|
|
if (!event || typeof handler !== 'function') return
|
|
const set = listeners.get(event) || new Set()
|
|
set.add(handler)
|
|
listeners.set(event, set)
|
|
}
|
|
|
|
export function off(event, handler) {
|
|
const set = listeners.get(event)
|
|
if (!set) return
|
|
set.delete(handler)
|
|
if (set.size === 0) listeners.delete(event)
|
|
}
|
|
|
|
export function emit(event, payload) {
|
|
const set = listeners.get(event)
|
|
if (!set || set.size === 0) return
|
|
for (const fn of Array.from(set)) {
|
|
try {
|
|
fn(payload)
|
|
} catch (e) {
|
|
// ignore
|
|
}
|
|
}
|
|
}
|
|
|