• Lv0
    粉丝1

积分91 / 贡献0

提问37答案被采纳3文章0

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

一只杨 显示全部楼层 发表于 2023-9-1 11:26:02

【问题描述】

封装一个通用的commonEvent工具类:希望在创建订阅者的同时注册一个自定义的回调函数,然后在收到事件通知的同时能调用这个自定义的回调函数。

【运行环境】

ROM: 3.2 Beta5; API 9

您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

精彩评论1

星辰大海

沙发 发表于 2023-9-4 09:36:27
你好兄弟 ,我项目中的封装。
  1. import commonEvent from '@ohos.commonEventManager';

  2. export class SubscribeEvent {
  3.   private static subscriber = null
  4.   // 自定义的回调函数变量
  5.   private static callback = null
  6.   /**
  7.    * 创建订阅者
  8.    * @param subscribeInfo 订阅事件
  9.    * @callback 用户自定义回调函数
  10.    */
  11.   static createSubscriber(subscribeInfo, callback:(a,b)=>void) {
  12.     this.callback = callback
  13.     commonEvent.createSubscriber(subscribeInfo, (err, subscriber) => {
  14.       if (err) {
  15.         console.error('CreateSubscriberCallBack err = ' + JSON.stringify(err))
  16.       } else {
  17.         this.subscriber = subscriber;
  18.         this.subscribe(this.subscriber)
  19.         console.info('Create subscriber succeed')
  20.       }
  21.     })
  22.   }

  23.   /**
  24.    * 订阅公共事件
  25.    * @param subscriber 订阅者
  26.    */
  27.   private static subscribe(subscriber) {
  28.     if (subscriber != null) {
  29.       commonEvent.subscribe(subscriber, (err, data) => {
  30.         if (err) {
  31.           console.error('subscribe err = ' + JSON.stringify(err))
  32.         } else {
  33.           console.info('SubscribeCallBack data= ' + JSON.stringify(data))
  34.           this.callback('hello callback', data)
  35.         }
  36.       })
  37.     } else {
  38.       console.info("Need create subscriber")
  39.     }
  40.   }
  41. }

  42. @Entry
  43. @Component
  44. struct Faq10_1 {
  45.   @State message: string = ''

  46.   build() {
  47.     Row() {
  48.       Column() {
  49.         Text('订阅:' + this.message)
  50.           .fontSize(30)
  51.           .fontWeight(FontWeight.Bold)
  52.           .onClick(() => {
  53.             let subscribeInfo = {
  54.               events: ["myEvent"]
  55.             };
  56.             let callback = (a,b) => {
  57.               this.message = a
  58.             }
  59.             SubscribeEvent.createSubscriber(subscribeInfo,callback)
  60.           })
  61.         Text('发布')
  62.           .fontSize(30)
  63.           .fontWeight(FontWeight.Bold)
  64.           .onClick(() => {
  65.             //公共事件相关信息
  66.             let options = {
  67.               code: 0,    //公共事件的初始代码
  68.               data: "initial data",//公共事件的初始数据
  69.               isOrdered: true  //有序公共事件
  70.             }
  71.             //发布公共事件回调
  72.             function publishCB(err) {
  73.               if (err) {
  74.                 console.error(`publish failed, code is ${err.code}, message is ${err.message}`);
  75.               } else {
  76.                 console.info("publish");
  77.               }
  78.             }
  79.             //发布公共事件
  80.             try {
  81.               commonEvent.publish("myEvent", options, publishCB);
  82.             } catch (err) {
  83.               console.error(`publish failed, code is ${err.code}, message is ${err.message}`);
  84.             }
  85.           })
  86.       }
  87.       .width('100%')
  88.     }
  89.     .height('100%')
  90.   }
  91. }
复制代码

Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部