• 【Harmony OS】【ARK UI】公共事件模块


     今天讲解一下公共事件模块功能的实现,主要从“参考资料”,“Api说明”,“代码实现”,“运行效果”,几个方面进行描述

    参考文档


    参考资料 公共事件模块

    Api说明

    commonEvent.createSubscriber

    createSubscriber(subscribeInfo: CommonEventSubscribeInfo, callback: AsyncCallback): void

    以异步方法构造CommonEventSubscriber对象,创建公共事件订阅者对象,使用callback形式返回。

    参数:

    参数名类型必填说明
    subscribeInfoCommonEventSubscribeInfo公共事件订阅者信息。
    callbackAsyncCallback创建公共事件订阅者的回调函数。

    示例代码

    1. var CommonEventSubscribeInfo = {events: ['publish_event']};
    2. commonEvent.createSubscriber(CommonEventSubscribeInfo, (error, subscriber) => {
    3. if (error != null) {
    4. console.error('Operation failed. Cause:' + JSON.stringify(error));
    5. } else {
    6. var mySubscriber = subscriber;
    7. console.info('createSubscriber success. ' + JSON.stringify(subscriber));
    8. }
    9. });

    commonEvent.subscribe

    subscribe(subscriber: CommonEventSubscriber, callback: AsyncCallback): void

    以异步方法订阅公共事件,使用callback形式返回。在调用subscriber接口订阅公共事件前,需要先通过createSubscriber接口创建一个CommonEventSubscriber对象。

    参数:

    参数名类型必填说明
    subscriberCommonEventSubscriber公共事件订阅者对象
    callbackAsyncCallback事件监听回调函数,当收到订阅的事件时,回调订阅的事件数据。

    示例代码

    1. commonEvent.subscribe(mySubscriber, (error, commonEventData) => { //mySubscriber为创建的CommonEventSubscriber对象
    2. if (error != null) {
    3. console.error('Operation failed. Cause: ' + JSON.stringify(error));
    4. } else {
    5. console.info('subscribe callback: ' + commonEventData);
    6. }
    7. });

    commonEvent.unsubscribe


    unsubscribe(subscriber: CommonEventSubscriber, callback?: AsyncCallback): void

    以异步方法取消订阅公共事件,使用callback形式返回。与subscribe接口相同,需要传入一个已创建的CommonEventSubscriber对象。

    参数:

    参数名类型必填说明
    subscriberCommonEventSubscriber公共事件订阅者对象
    callbackAsyncCallback取消订阅回调函数

    示例:

    1. commonEvent.unsubscribe(mySubscriber, (error, commonEventData) => { //mySubscriber为创建的CommonEventSubscriber对象
    2. if (error != null) {
    3. console.error('Operation failed. Cause: ' + JSON.stringify(error));
    4. } else {
    5. console.info('unsubscribe success');
    6. }
    7. });

    补充说明

    CommonEventSubscribeInfo

    订阅公共事件可选的配置信息。

    名称可读可写类型必填描述
    eventsArray需要订阅的公共事件。
    publisherPermissionstring发布者的权限。(暂不支持)
    publisherDeviceIdstring设备ID。(暂不支持)
    userIdnumber用户ID。
    prioritynumber订阅者优先级,仅用于有序公共事件场景,优先级较高的订阅者将首先收到此类事件。范围为:[-100,1000]。

    示例

    1. var CommonEventSubscribeInfo = {events: ['test_event']};
    2. var CommonEventSubscribeInfo = {events: ['test_event1', 'test_event2'], userId:1, priority:100};

    CommonEventData

    公共事件的回调数据。

    名称可读可写类型必填描述
    eventstring公共事件名称。
    bundleNamestring包名称。
    codenumber有序公共事件的结果码,默认值为0。
    datastring有序公共事件的结果数据,默认值为空字符串。
    parametersobject公共事件的参数说明。

    代码实现


    1. // @ts-nocheck
    2. import commonEvent from '@ohos.commonEvent';
    3. @Entry
    4. @Component
    5. struct MyCommonEvent {
    6. @State result:string="结果:";
    7. mysubscriber:CommonEventSubscriber;
    8. //todo 订阅通知
    9. private aboutToAppear(){
    10. var that=this;
    11. var CommonEventSubscribeInfo = {events: ['publish_event']};
    12. //todo 创建订阅
    13. commonEvent.createSubscriber(CommonEventSubscribeInfo, (error, subscriber) => {
    14. if (error != null) {
    15. console.error('Operation failed. Cause:' + JSON.stringify(error));
    16. } else {
    17. that.mysubscriber=subscriber;
    18. console.info('createSubscriber success. ' + JSON.stringify(subscriber));
    19. //todo 开始订阅
    20. commonEvent.subscribe(subscriber, (error, commonEventData) => { //mySubscriber为创建的CommonEventSubscriber对象
    21. if (error != null) {
    22. console.error('Operation failed. Cause: ' + JSON.stringify(error));
    23. } else {
    24. console.log('subscribe callback: ' + JSON.stringify(commonEventData));
    25. that.result= JSON.stringify(commonEventData)
    26. }
    27. });
    28. }
    29. });
    30. }
    31. private aboutToDisappear() {
    32. //取消订阅
    33. commonEvent.unsubscribe(this.mysubscriber, (error, commonEventData) => { //mySubscriber为创建的CommonEventSubscriber对象
    34. if (error != null) {
    35. console.error('Operation failed. Cause: ' + JSON.stringify(error));
    36. } else {
    37. console.log('unsubscribe success');
    38. }
    39. });
    40. }
    41. build() {
    42. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
    43. Button('Send Common').onClick(event => {
    44. this.broadcastInternal()
    45. })
    46. Text(this.result).width("100%").height("30%").fontSize(20).textAlign(TextAlign.Center)
    47. }
    48. .width('100%')
    49. .height('100%')
    50. }
    51. //todo 发送信息
    52. private broadcastInternal() {
    53. // 自定义事件,只支持string类型数据
    54. var data = {
    55. code: 1, data: "111111", isOrdered: true
    56. }
    57. commonEvent.publish("publish_event", data, (error, value) => {
    58. if (error != null) {
    59. console.error('broadcast ---> publish failed. Cause: ' + JSON.stringify(error));
    60. } else {
    61. console.log('broadcast ---> publish common event success. ' + JSON.stringify(value));
    62. }
    63. });
    64. }
    65. }

    运行效果


    83e3e0159834257e38665c73034b5c77_1666x1054.gif%40900-0-90-f.gif

     

     欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh

  • 相关阅读:
    宿主机无法连接docker里的redis问题解决(生产环境慎用)
    Android端自动化测试工具源码分享
    嵌入式中断函数设计
    Java-基于SSM的智能仓储管理系统
    基于梯度优化的BP神经网络(分类应用) - 附代码
    操作系统四大特征
    信号线上串接电阻的作用
    网络工程师知识点4
    适配器模式 详解 设计模式
    小程序里.vue界面中传值的两种方式
  • 原文地址:https://blog.csdn.net/weixin_44708240/article/details/126155212