Skip to content

事件中心

ts
type Fn = (...args:  any[]) => void;

export class EventCenter {
  private events: { [key: string]: Fn[] } = {};

  public on(event: string, callback: Fn) {
    if (!this.events[event]) {
      this.events[event] = [];
    }
    this.events[event].push(callback);
  }

  public emit(event: string, ...args: any[]) {
    if (this.events[event]) {
      this.events[event].forEach((callback) => {
        callback(...args);
      });
    }
  }

  public off(event: string, callback: Fn) {
    if (this.events[event]) {
      this.events[event] = this.events[event].filter((cb) => cb !== callback);
    }
  }
}

export const eventCenter = new EventCenter();

事件中心可以注册一些事件,分离业务逻辑。