// 全局监听器
class GlobalEvent {
// 事件队列
queueHandle = Object.create(null);
// 事件队列id
idQueue = [];
constructor() {
console.log(Math.ceil(Math.random() * 10));
}
// 绑定事件
// eventName 事件名称
// handle 方法
$on(eventName, handle) {
if (!this.queueHandle[eventName]) this.queueHandle[eventName] = [];
this.queueHandle[eventName].push({ handle });
this.idQueue.push({
eventName,
index: this.queueHandle[eventName].length - 1,
});
return this.idQueue.length - 1;
}
// 触发事件
// eventName 事件名称
// params 参数
$emit(eventName, params) {
if (!this.queueHandle[eventName] || !this.queueHandle[eventName].length)
return false;
this.queueHandle[eventName].forEach((item) => {
if (item) item.handle(params);
});
}
// 删除绑定的事件 id
$remove(id) {
if (!this.idQueue[id]) return false;
let eventName = this.idQueue[id].eventName;
if (!this.queueHandle[eventName]) return false;
let index = this.idQueue[id].index;
delete this.queueHandle[eventName][index];
delete this.idQueue[id];
}
}