class EventBus {
constructor() {
this.events = {}
}
/**
* @desc 监听事件
* @param {String} name 事件名
* @param {Function} callback 回调函数
*/
on(name, callback) {
this.events[name] ? this.events[name].push(callback) : this.events[name] = [callback]
}
/**
* @desc 触发事件
* @param {String} name 事件名
* @param {Function} params 参数
*/
trigger(name, params) {
this.events[name] && Array.isArray(this.events[name]) && this.events[name].forEach(callback => callback(params))
}
/**
* @desc 销毁
* @param {String} name 事件名
*/
off(name, handler) {
let handlers = this.events[name]
if (handlers) {
// 清空对应的handle
handlers.splice(handlers.indexOf(handler) >>> 0, 1)
}
}
/**
* 销毁所有name的事件
* @param {String} name
*/
offAll(name) {
this.events[name] = []
}
}
export default new EventBus()
简易版本:直接在 utils 文件夹中新建 utils 中添加方法即可
module.exports = function (n) {
return {
all: n = n || new Map,
on: function (e, t) {
var i = n.get(e); i && i.push(t) || n.set(e, [t])
},
off: function (e, t) {
if (t) {
var i = n.get(e);
i && i.splice(i.indexOf(t) >>> 0, 1)
} else {
var i = n.get(e);
i && i.splice(0, i.length)
}
},
emit: function (e, t) {
(n.get(e) || []).slice().map(function (n) { n(t) }), (n.get("*") || []).slice().map(function (n) { n(e, t) })
}
}
};