如何封装一个通用的commonEvent工具类

如何封装一个通用的commonEvent工具类

HarmonyOS
2024-03-19 15:03:32
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zhuyanxi

通过commonEventManager模块实现,具体可参考如下代码:

import { commonEventManager , BusinessError } from '@kit.BasicServicesKit'; 
 
export class SubscribeEvent { 
  private static subscriber: commonEventManager.CommonEventSubscriber 
  // 自定义的回调函数变量 
  private static callback: (a: BusinessError, b: commonEventManager.CommonEventSubscriber) => void 
 
  /** 
   * 创建订阅者 
   * @param subscribeInfo 订阅事件 
   * @callback 用户自定义回调函数 
   */ 
  static createSubscriber(subscribeInfo: commonEventManager.CommonEventSubscribeInfo, callback: (err: BusinessError, commonEventSubscriber: commonEventManager.CommonEventSubscriber) => void) { 
    SubscribeEvent.callback = callback 
    commonEventManager.createSubscriber(subscribeInfo, (err: BusinessError, subscriber) => { 
      if (err) { 
        console.error('CreateSubscriberCallBack err = ' + JSON.stringify(err)) 
      } else { 
        SubscribeEvent.subscriber = subscriber; 
        SubscribeEvent.subscribe(subscriber) 
        console.info('Create subscriber succeed') 
      } 
    }) 
  } 
 
  /** 
   * 订阅公共事件 
   * @param subscriber 订阅者 
   */ 
  private static subscribe(subscriber: commonEventManager.CommonEventSubscriber) { 
    if (subscriber != null) { 
      commonEventManager.subscribe(subscriber, (err: BusinessError, data) => { 
        if (err) { 
          console.error('subscribe err = ' + JSON.stringify(err)) 
        } else { 
          console.info('SubscribeCallBack data= ' + JSON.stringify(data)) 
          // this.callback('hello callback', data) 
        } 
      }) 
    } else { 
      console.info("Need create subscriber") 
    } 
  } 
} 
 
@Entry 
@Component 
struct Faq10_1 { 
  @State message: string = '' 
 
  // 发布公共事件回调 
  publishCB(err: BusinessError) { 
     if (err) { 
      console.error(`publish failed, code is ${err.code}, message is ${err.message}`); 
    } else { 
      console.info("publish") 
      ; 
    } 
  } 
 
  build() { 
    Row() { 
      Column() { 
        Text('订阅:' + this.message) 
          .fontSize(30) 
          .fontWeight(FontWeight.Bold) 
          .onClick(() => { 
            let subscribeInfo: commonEventManager.CommonEventSubscribeInfo = { 
              events: ["myEvent"] 
            }; 
            let callback = (a: BusinessError, b: commonEventManager.CommonEventSubscriber) => { 
              this.message = a.name 
            } 
            SubscribeEvent.createSubscriber(subscribeInfo, callback) 
          }) 
        Text('发布') 
          .fontSize(30) 
          .fontWeight(FontWeight.Bold) 
          .onClick(() => { 
            // 公共事件相关信息 
            let options: commonEventManager.CommonEventPublishData = { 
              code: 0, // 公共事件的初始代码 
              data: "initial data", // 公共事件的初始数据 
              isOrdered: true  // 有序公共事件 
            } 
            // 发布公共事件 
            try { 
              commonEventManager.publish("myEvent", options, this.publishCB); 
            } catch (err) { 
              console.error(`publish failed, code is ${err.code}, message is ${err.message}`); 
            } 
          }) 
      } 
      .width('100%') 
    } 
    .height('100%') 
  } 
}

参考链接

公共事件模块

分享
微博
QQ
微信
回复
2024-03-19 23:05:31
相关问题
如何封装一个自定义Dialog对话框
251浏览 • 1回复 待解决
如何工具中获取Context
125浏览 • 1回复 待解决
鸿蒙 如何实现一个渐变圆形图片;
10492浏览 • 2回复 已解决
PersistentStorage如何持久化一个对象?
638浏览 • 1回复 待解决
如何开发一个纯后台应用
247浏览 • 1回复 待解决
如何创建一个pgsql只读账户?
934浏览 • 2回复 待解决
鸿蒙-有没有缓存工具
4087浏览 • 1回复 待解决
如何通过DevEco新建一个js/tsmodule?
3762浏览 • 1回复 待解决
如何一个Component画到Pixelmap上
201浏览 • 1回复 待解决
如何调用并测试一个wifi接口?
4156浏览 • 1回复 待解决
mysql左连接一个问题
661浏览 • 1回复 待解决
js如何清空一个input 输入框内容
5761浏览 • 1回复 待解决
Stage模型下如何开发一个服务卡片
515浏览 • 1回复 待解决