t-comm
Version:
专业、稳定、纯粹的工具库
93 lines (86 loc) • 2.54 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
var _createClass = require('@babel/runtime/helpers/createClass');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var _classCallCheck__default = /*#__PURE__*/_interopDefaultLegacy(_classCallCheck);
var _createClass__default = /*#__PURE__*/_interopDefaultLegacy(_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__default["default"](this, EventBus);
this.events = {};
}
/**
* 发布事件
* 触发指定事件的所有监听器
* @param eventName - 事件名称
* @param args - 传递给监听器的参数
*/
return _createClass__default["default"](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;
}
}
}
}
}]);
}();
exports.EventBus = EventBus;