UNPKG

t-comm

Version:

专业、稳定、纯粹的工具库

84 lines (81 loc) 2.13 kB
import _classCallCheck from '@babel/runtime/helpers/classCallCheck'; import _createClass from '@babel/runtime/helpers/createClass'; /** * 事件总线类 * 实现发布-订阅模式,用于组件间通信 * @example * ```ts * const bus = new EventBus(); * * // 订阅事件 * bus.on('message', (data) => { * console.log('收到消息:', data); * }); * * // 发布事件 * bus.emit('message', 'Hello World'); * * // 取消订阅 * bus.off('message'); * ``` */ var EventBus = /*#__PURE__*/function () { function EventBus() { _classCallCheck(this, EventBus); this.events = {}; } /** * 发布事件 * 触发指定事件的所有监听器 * @param eventName - 事件名称 * @param args - 传递给监听器的参数 */ return _createClass(EventBus, [{ key: "emit", value: function emit(eventName) { for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } if (this.events[eventName]) { this.events[eventName].forEach(function (fn) { fn.apply(void 0, args); }); } } /** * 订阅事件 * 添加事件监听器 * @param eventName - 事件名称 * @param fn - 监听器函数 */ }, { key: "on", value: function on(eventName, fn) { this.events[eventName] = this.events[eventName] || []; this.events[eventName].push(fn); } /** * 取消订阅 * 移除指定事件的监听器 * @param eventName - 事件名称 * @param fn - 要移除的监听器函数,如果不传则移除该事件的所有监听器 */ }, { key: "off", value: function off(eventName, fn) { if (!fn) { delete this.events[eventName]; return; } if (this.events[eventName]) { for (var i = 0; i < this.events[eventName].length; i++) { if (this.events[eventName][i] === fn) { this.events[eventName].splice(i, 1); break; } } } } }]); }(); export { EventBus };