Vanessa 2023-05-07 17:31:50 +08:00
parent 9bbfd2a3e4
commit 8fe520f4af
8 changed files with 67 additions and 8 deletions

View file

@ -0,0 +1,23 @@
export class EventBus<DetailType = any> {
private eventTarget: EventTarget;
constructor(name = "") {
this.eventTarget = document.appendChild(document.createComment(name));
}
on(type: TEventBus, listener: (event: CustomEvent<DetailType>) => void) {
this.eventTarget.addEventListener(type, listener);
}
once(type: TEventBus, listener: (event: CustomEvent<DetailType>) => void) {
this.eventTarget.addEventListener(type, listener, {once: true});
}
off(type: TEventBus, listener: (event: CustomEvent<DetailType>) => void) {
this.eventTarget.removeEventListener(type, listener);
}
emit(type: TEventBus, detail?: DetailType) {
return this.eventTarget.dispatchEvent(new CustomEvent(type, {detail}));
}
}