HarmonyOS如何在非struct的class中进行emitter.on?

当前在struct中可以非常方便的进行通信,可以使用emitter.on()注册对某个事件的监听,如某个struct中:

aboutToAppear() { 
emitter.on({
      eventId:EmitterConstants.EventID1
    }, () => {
      doSth()
    })
}

如何在普通class中建立该种监听?如果有请给出相应demo,如果没有请给出理由。

阅读 427
1 个回答

可以在class中使用emmitter监听,demo如下:

1、util.ets(创建class类)

import emitter from '@ohos.events.emitter';
export const emitterEvent: emitter.InnerEvent = {
  eventId: 1,
  priority: emitter.EventPriority.HIGH
}
export class Util {
  subscribe() {
    emitter.on(emitterEvent, (data: emitter.EventData) => this.subscribeCallback(data))
  }
  subscribeCallback(data: emitter.EventData) {
    console.log(`接收消息:${JSON.stringify(data)}`)
  }
  unsubscribe() {
    emitter.off(1)
  }
}

2、Index.ets(页面中调用class)

import { Util, emitterEvent } from './util';
import emitter from '@ohos.events.emitter';
@Entry
@Component
struct Index {
  private utilClass: Util = new Util();
  aboutToAppear(): void {
    this.utilClass.subscribe();
  }
  aboutToDisappear(): void {
    this.utilClass.unsubscribe();
  }
  handleClick() {
    const eventData: emitter.EventData = {
      data: { id: 1, content: 'test' }
    }
    emitter.emit(emitterEvent, eventData)
  }
  build() {
    Column() {
      Button('发送消息').width(100).height(50).onClick(this.handleClick)
    }
    .width('100%')
    .height('100%')
  }
}
logo
HarmonyOS
子站问答
访问
宣传栏