鸿蒙emitter 订阅事件封装 EmitterUtils

适用于api11 和api12  废话不多说,直接上代码

import emitter from '@ohos.events.emitter';
import { StringUtils } from '@ohos/flutter_ohos';

export  class EmitterUtils{


  /**
   * 发射字符串类型的
   * @param eventId
   * @param data
   */
  public  static sendEvent(eventId:string,data:string=''){
    let eventData: emitter.EventData = {
      data: {
        "content": data,
      }
    };
    let options: emitter.Options = {
      priority: emitter.EventPriority.HIGH
    };
    emitter.emit(eventId, options, eventData);
  }
  /**
   * 发送一个object ,并将eventId 带过去
   * @param eventId
   * @param data
   */
  public  static sendObjetEvent(eventId:string,data:object){
    let eventData: emitter.EventData = {
      data: {
        "content": data,
        "eventId":eventId
      }
    };
    let options: emitter.Options = {
      priority: emitter.EventPriority.HIGH
    };
    emitter.emit(eventId, options, eventData);
  }
  /**
   * 监听string
   * @param eventId
   * @param onReceive
   */
  public static listenString(eventId:string,onReceive:(content:string)=>void){
    // 收到eventId为"eventId"的事件后执行回调函数
    emitter.on(eventId, (data:emitter.EventData) => {
      let content:string=data.data?.content;
      if(StringUtils.isNotEmpty(content)){
        onReceive(content)
      }
    });
  }
  /**
   * 监听对象
   * @param eventId
   * @param onReceive
   */
  public static listen(eventId:string,onReceive:(data:emitter.EventData)=>void){
    // 收到eventId为"eventId"的事件后执行回调函数
    emitter.on(eventId, (data:emitter.EventData) => {
      onReceive(data)
    });
  }
  /**
   * 取消eventID的所有事件回调处理函数
   * @param ventId
   */
  public  static  closeEvent(ventId:string){
    emitter.off(ventId);
  }

}

发送字符类型

EmitterUtils.sendEvent(EmitterIdConstants.TAB_DASHBOARD_NO_TITLE_DATA,"noTitle")

接收字符串类型

EmitterUtils.listenString(EmitterIdConstants.TAB_DASHBOARD_NO_TITLE_DATA, (content: string) => {
      if (StringUtils.isNotEmpty(content)) {
        //...todo...
      }
    })

发送对象类型

let data= await this.fetchKnowledgeTitles();
let map = new Map<string, object>();
map.set("titleList", data ? data.result || [] : []);
EmitterUtils.sendObjetEvent(EmitterIdConstants.GET_TITLE_LIST,map)

接收对象类型

EmitterUtils.listen(EmitterIdConstants.GET_TITLE_LIST, (data: emitter.EventData) => {
      if (data.data != null){
        try {
          let map = data.data?.content as Map<string, Object>
        } catch (e) {
        }
      }
    })

销毁这个订阅

 aboutToDisappear(): void {
    EmitterUtils.closeEvent(EmitterIdConstants.ON_HOME_TAB_CLICK)
  }

上面 EmitterIdConstants 是你起的事件常量名字

export class EmitterIdConstants{
  static readonly ON_HOME_TAB_CLICK = 'home_tab_click';
  static readonly GET_TITLE_LIST = 'get_title_list'; //title List
 ........
}

相关推荐

  1. 鸿蒙emitter 订阅事件封装 EmitterUtils

    2024-06-07 19:14:02       32 阅读
  2. 鸿蒙harmony--线程间处理和发送事件Emitter

    2024-06-07 19:14:02       43 阅读
  3. SpringEvent事件发布&订阅Demo

    2024-06-07 19:14:02       24 阅读
  4. TP6 事件绑定、监听、订阅

    2024-06-07 19:14:02       28 阅读
  5. 鸿蒙:配置事件

    2024-06-07 19:14:02       60 阅读
  6. 《框架封装 · Redis 事件监听》

    2024-06-07 19:14:02       27 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-07 19:14:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-07 19:14:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-07 19:14:02       82 阅读
  4. Python语言-面向对象

    2024-06-07 19:14:02       91 阅读

热门阅读

  1. git常用命令

    2024-06-07 19:14:02       31 阅读
  2. 自己实现一个Feign

    2024-06-07 19:14:02       27 阅读
  3. Random —— python(And)numpy

    2024-06-07 19:14:02       27 阅读
  4. D365 子窗体调用父窗体方法

    2024-06-07 19:14:02       33 阅读
  5. PyTorch交叉熵理解

    2024-06-07 19:14:02       30 阅读
  6. Python—面向对象小解(4)--模块介绍

    2024-06-07 19:14:02       25 阅读
  7. 【MyBatisPlus】MyBatisPlus介绍与使用

    2024-06-07 19:14:02       30 阅读
  8. 基于python的宠物商店管理系统部署步骤

    2024-06-07 19:14:02       31 阅读
  9. 力扣算法题:多数元素 --多语言实现

    2024-06-07 19:14:02       29 阅读
  10. golang标准库错误处理及自定义错误处理示例

    2024-06-07 19:14:02       32 阅读
  11. shader 实践的宝藏网站

    2024-06-07 19:14:02       19 阅读
  12. 什么事无线电报,他是怎么实现的

    2024-06-07 19:14:02       29 阅读