Skip to content

事件总线实现 - Bus 类

概述

Bus 类提供了一个轻量级且灵活的事件总线实现,适用于需要在不同组件或模块之间进行收发事件、通信的场景,而无需直接引用彼此。通过使用事件总线,可以提高代码的可维护性和可扩展性,同时保持良好的代码组织结构。

创建事件总线实例

首先,你需要创建一个 Bus 类的实例, 并且保持单例模式:

typescript
import { Bus } from "cat-tool";
const eventBus = new Bus();

注册事件监听器

使用 addEventListener 方法注册事件监听器。你可以选择性地提供一个唯一的 fnKey 来标识监听器,以便稍后移除它:

typescript
eventBus.addEventListener("myEvent", (data) => {
  console.log("Event triggered with data:", data);
});

// 或者使用自定义 key
eventBus.addEventListener(
  "myEvent",
  (data) => console.log("event:", data),
  "fnkey"
);

触发事件

使用 emit 方法触发事件,并传递数据给监听器:

typescript
eventBus.emit("myEvent", { message: "Hello World!" });

移除事件监听器

使用 removeEventListener 方法移除特定的事件监听器,需要提供事件名称和监听器的 fnKey:

typescript
eventBus.removeEventListener("myEvent", "customListenerKey");

移除所有事件监听器

使用 removeAllEventListener 方法移除特定事件的所有监听器:

typescript
eventBus.removeAllEventListener("myEvent");

示例

下面是一个完整的示例,展示了如何使用 Bus 类:

typescript
// eventBus.js
import { Bus } from "cat-tool";
export const eventBus = new Bus();
js
import { eventBus } from "./eventBus.js";
// A模块 监听注册时间
eventBus.addEventListener("myEvent", (data) => {});
js
import { eventBus } from "./eventBus.js";
// B模块 触发事件
eventBus.emit("myEvent", { message: "Hello World!" });

基于 MIT 许可发布