UNPKG

vite-uni-dev-tool

Version:

vite-uni-dev-tool, debug, uni-app, 一处编写,到处调试

71 lines (70 loc) 1.72 kB
class n { constructor() { this.events = /* @__PURE__ */ new Map(); } /** * 订阅事件 * @param eventName 事件名称 * @param handler 事件处理函数 * @returns 返回一个取消订阅的函数 */ on(s, t) { return this.events.has(s) || this.events.set(s, []), this.events.get(s).push(t), () => { this.off(s, t); }; } /** * 发布事件 * @param eventName 事件名称 * @param payload 事件携带的数据 */ emit(s, t) { this.events.has(s) && [...this.events.get(s)].forEach((h) => h(t)); } /** * 取消订阅事件 * @param eventName 事件名称 * @param handler 要取消的事件处理函数 */ off(s, t) { if (this.events.has(s)) { const e = this.events.get(s); this.events.set( s, e.filter((h) => h !== t) ); } } /** * 只订阅一次事件,触发后自动取消订阅 * @param eventName 事件名称 * @param handler 事件处理函数 */ once(s, t) { const e = (h) => { t(h), this.off(s, e); }; this.on(s, e); } /** * 清除指定事件的所有订阅者,如果未提供事件名称,则清除所有事件 * @param eventName 可选的事件名称 */ clear(s) { s ? this.events.delete(s) : this.events.clear(); } /** * 获取指定事件的订阅者数量,如果未提供事件名称,则返回所有事件的订阅者总数 * @param eventName 可选的事件名称 * @returns 订阅者数量 */ count(s) { return s ? this.events.has(s) ? this.events.get(s).length : 0 : Array.from(this.events.values()).reduce( (t, e) => t + e.length, 0 ); } } export { n as EventBus };