t-comm
Version:
专业、稳定、纯粹的工具库
84 lines (81 loc) • 2.13 kB
JavaScript
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 };