UNPKG

zz-chart

Version:

Alauda Chart components by Alauda Frontend Team

101 lines 2.86 kB
const WILDCARD = '*'; /* event-emitter */ export default class EventEmitter { constructor() { this._events = {}; } /** * 监听一个事件 * @param evt * @param callback * @param once */ // type-coverage:ignore-next-line on(evt, callback, once) { if (!this._events[evt]) { this._events[evt] = []; } this._events[evt].push({ callback, once: !!once, }); return this; } /** * 监听一个事件一次 * @param evt * @param callback */ once(evt, callback) { return this.on(evt, callback, true); } /** * 触发一个事件 * @param evt * @param args */ emit(evt, ...args) { const events = this._events[evt] || []; const wildcardEvents = this._events[WILDCARD] || []; // 实际的处理 emit 方法 const doEmit = (es) => { let length = es.length; for (let i = 0; i < length; i++) { if (!es[i]) { continue; } const { callback, once } = es[i]; if (once) { es.splice(i, 1); if (es.length === 0) { delete this._events[evt]; } length--; // eslint-disable-next-line sonar/updated-loop-counter i--; } callback.apply(this, args); } }; doEmit(events); doEmit(wildcardEvents); } /** * 取消监听一个事件,或者一个 channel */ // eslint-disable-next-line sonarjs/cognitive-complexity off(evt, callback) { if (!evt) { // evt 为空全部清除 this._events = {}; } else { if (!callback) { // evt 存在,callback 为空,清除事件所有方法 delete this._events[evt]; } else { // evt 存在,callback 存在,清除匹配的 const events = this._events[evt] || []; let length = events.length; for (let i = 0; i < length; i++) { if (events[i].callback === callback) { events.splice(i, 1); length--; // eslint-disable-next-line sonar/updated-loop-counter i--; } } if (events.length === 0) { delete this._events[evt]; } } } return this; } /* 当前所有的事件 */ getEvents() { return this._events; } } //# sourceMappingURL=event-emitter.js.map