vite-uni-dev-tool
Version:
vite-uni-dev-tool, debug, uni-app, 一处编写,到处调试
71 lines (70 loc) • 1.72 kB
JavaScript
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
};