代码拉取完成,页面将自动刷新
class EventBus{
// 存储事件-动作的对应关系
private events: Map<string,any> = new Map();
constructor(events?: Map<string, Function>){
this.events = events || new Map();
}
/**
* 增加订阅事件,并向订阅事件中添加动作/方法
* @param event 事件类型
* @param fn 要添加的动作/方法
*/
on(event:string, fn:any): void{
const e = this.events.get(event);
if (!e) {
this.events.set(event, [fn]);
} else {
e.push(fn);
}
}
/**
* 删除对应的订阅事件
* @param event 要删除的订阅事件
*/
off(event:string): void{
this.events.delete(event);
}
/**
* 发布事件,所有订阅此事件的动作均可以获取到消息
* @param event 要发布的事件
* @param args 向动作/方法中要传递的数据
*/
emit(event: string, ...args: any[] ): void{
const e = this.events.get(event);
if (!e) {
return;
} else {
for (let i = 0; i < e.length; i++) {
e[i].apply({ key: 'this is key' }, args);
}
}
}
}
// 示例话
const eventBus = new EventBus();
// 订阅/监听『print-year』事件,待事件发布之后便可获取到事件传递来的参数
eventBus.on('print-year', (date: Date) => {
console.log(`我关注的是当前年份:${date.getFullYear()}`);
})
eventBus.on('print-month', (date: Date) => {
console.log(`我关注的是当前月份:${date.getMonth()}`);
})
eventBus.on('print-date', (date: Date) => {
console.log(`我关注的是当前日期:${date.getDate()}`);
})
// 发布/触发事件并传递参数
eventBus.emit('print-year', new Date());
eventBus.emit('print-month', new Date());
eventBus.emit('print-date', new Date());
// 取消订阅『print-year』事件,对应事件再次发布不会收到信息
eventBus.off('print-year');
// 发布/触发事件并传递参数
eventBus.emit('print-year', new Date());
eventBus.emit('print-month', new Date());
eventBus.emit('print-date', new Date());
/** 输出-->:
* 我关注的是当前年份:2024
* 我关注的是当前月份:7
* 我关注的是当前日期:20
* 我关注的是当前年份:2024
* 我关注的是当前月份:7
*/
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。