yuxuannnn_utils
Version:
62 lines (61 loc) • 2.18 kB
JavaScript
;
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var _EventBus_eventMap;
Object.defineProperty(exports, "__esModule", { value: true });
exports.EventBus = void 0;
/**
* 发布订阅模式 : 事件总线
*/
class EventBus {
constructor() {
_EventBus_eventMap.set(this, new Map());
}
/**
* 监听事件
*/
$on(eventType, handle) {
const _eventSet = __classPrivateFieldGet(this, _EventBus_eventMap, "f").get(eventType);
if (_eventSet) {
_eventSet.add(handle);
}
else {
const newEventSet = new Set();
newEventSet.add(handle);
__classPrivateFieldGet(this, _EventBus_eventMap, "f").set(eventType, newEventSet);
}
}
$emit(eventType, ...args) {
const _eventSet = __classPrivateFieldGet(this, _EventBus_eventMap, "f").get(eventType);
if (_eventSet) {
for (const event of _eventSet) {
event.apply(this, args);
if (event.__once__) {
_eventSet.delete(event);
}
}
}
}
$once(eventType, handle) {
handle.__once__ = true; // 事件仅触发一次
this.$on(eventType, handle);
}
$off(eventType, handle) {
const _eventSet = __classPrivateFieldGet(this, _EventBus_eventMap, "f").get(eventType);
if (!_eventSet) {
return;
}
if (!handle) {
// 销毁eventType的所有事件
_eventSet.clear();
}
else {
_eventSet.delete(handle);
}
}
}
exports.EventBus = EventBus;
_EventBus_eventMap = new WeakMap();