UNPKG

info-bus

Version:

It can be used to communicate in any project.

79 lines (75 loc) 2.68 kB
'use strict'; var infoBus = { events: {}, $emit: function $emit(name) { // 触发事件 var taskArray = this.events[name]; if (taskArray instanceof Array) { for (var _len = arguments.length, rest = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { rest[_key - 1] = arguments[_key]; } var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = taskArray[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var task = _step.value; task.callback.apply(this, rest); if (task.type === 'once') { var index = taskArray.indexOf(task); taskArray.splice(index, 1); } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } } }, $on: function $on(name, callback) { // 注册事件 var taskArray = this.events[name]; if (taskArray === undefined) { this.events[name] = []; this.events[name].push({ type: 'on', callback: callback }); } else { taskArray.push({ type: 'on', callback: callback }); } }, $off: function $off(name, callback) { // 注销事件 if (callback === undefined) { this.events[name] = []; return; } var taskArray = this.events[name]; if (taskArray instanceof Array) { taskArray.map(function (task, index, array) { if (task.callback === callback) { array.splice(index, 1); } }); } }, $once: function $once(name, callback) { // 监听一次 var taskArray = this.events[name]; if (taskArray === undefined) { this.events[name] = []; this.events[name].push({ type: 'once', callback: callback }); } else { taskArray.push({ type: 'once', callback: callback }); } } }; module.exports = infoBus;