我们在HarmonyOS开发中,如何事件总线(Event Bus)?

阅读 607
1 个回答

事件总线是一种用于组件间通信的模式,它允许组件发布和订阅事件,而不需要知道彼此的存在。


// 事件总线服务
class EventBus {
  private listeners: Map<string, Function[]> = new Map();

  on(event: string, listener: Function) {
    if (!this.listeners.has(event)) {
      this.listeners.set(event, []);
    }
    this.listeners.get(event)!.push(listener);
  }

  off(event: string, listener: Function) {
    const listeners = this.listeners.get(event);
    if (listeners) {
      const index = listeners.indexOf(listener);
      if (index > -1) {
        listeners.splice(index, 1);
      }
    }
  }

  emit(event: string, data: any) {
    const listeners = this.listeners.get(event);
    if (listeners) {
      listeners.forEach((listener) => listener(data));
    }
  }
}

// 使用事件总线
const eventBus = new EventBus();

@Entry
@Component
struct Index {
  build() {
    Column() {
      Button('Publish Event')
        .onClick(() => {
          eventBus.emit('greet', { name: 'World' });
        })
        .width('100%')
        .height(100)
      
      // 订阅事件
      eventBus.on('greet', (data) => {
        console.log(`Greet event received: ${data.name}`);
      });
    }
    .width('100%')
    .height('100%')
  }
}

EventBus类提供了事件发布和订阅的功能。Index组件在点击按钮时发布一个事件,而另一个部分的代码订阅了这个事件,并在事件被触发时执行相应的逻辑。

参见:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides...

本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进