当前位置: 首页 > news >正文

「HarmonyOS」EventHub事件通知详细使用方法

需求背景:

在开发过程中,肯定会出现触发特定事件,需要全局进行通知,与之相关的部分进行执行相应的修改方法。举个例子:修改了用户个人昵称,需要进行全局通知,在涉及昵称的部分收到通知后,进行重新调用个人信息接口

EventHub模块介绍

在ArkTs中,EventHub提供这个对应功能,如下是在官方文档中的介绍:

EventHub模块提供了事件中心,提供订阅、取消订阅、触发事件的能力

实践操作
1.模块化处理

在官方文档中介绍,每次使用EventHub功能前,需要通过Ability实例的成员变量context获取
所以为了简便使用方法,以及使用统一一个EventHub模块,所以我将其方法进行模块化处理

/// EventHubUtil.ets
let context = getContext(this)
let eventhub = context.eventHubexport class EventHubUtil {/// 订阅事件static on(eventName: string, callback: Function) {eventhub.on(eventName, callback)}/// 取消订阅事件static off(eventName: string, callback?: Function) {eventhub.off(eventName, callback)}/// 触发事件static emit(eventName: string, ...params: Object[]) {eventhub.emit(eventName, params)}
}
2.订阅指定事件

在我需要订阅、监听指定事件是否发生时,具体操作方法:
ps:下方均以需要更新用户个人信息为例
在用户信息修改后,外部页面也需要进行更改用户信息的地方进行事件监听

EventHubUtil.on('updateUserInfo', () => {this.requestUserInfo()})EventHubUtil.on('withParams', this.LogParams})LogParams(param1, param2) {console.log('LogParams is called,' + param1 + ',' + param2)
}

‘updateUserInfo’: 订阅事件名
() => {this.requestUserInfo():匿名函数,是在收到事件通知后,执行匿名函数对应内容方法
this.LogParams: 带参数自定义方法,收到事件通知后,获取对应参数,执行该方法

3.取消订阅指定事件

在页面销毁时,对应的订阅事件也需要进行销毁,以减少系统资源消耗

aboutToDisappear() {EventHubUtil.off('updateUserInfo', () => {this.requestUserInfo()})EventHubUtil.off('withParams', this.LogParams})
}LogParams(param1, param2) {console.log('LogParams is called,' + param1 + ',' + param2)
}

此处同理:
‘updateUserInfo’: 订阅事件名
() => {this.requestUserInfo():匿名函数
this.LogParams: 带参数自定义方法

4. 触发指定事件

在我需要进行触发指定事件时执行的方法
在例子中则为成功修改了用户信息时,进行触发指定事件,以达到通知其他订阅事件处进行信息修改

// 修改用户个人信息请求
HttpApiManager.getInstance().updateUserInfo(new UserInfoBean(null, text)).then((data: UserInfoBean) => {this.userInfo = data// 触发更新用户信息事件EventHubUtil.emit('updateUserInfo')ToastUtil.getInstance().showToast('修改成功')}).catch(error => {ToastUtil.getInstance().showToast(error.message)})// 带参数方法事件触发
EventHubUtil.emit('withParams', 111, 222)
EventHubUtil.emit('withParams', 111)
// 触发后数据打印:
'LogParams is called, 111, 222'
'LogParams is called, 111, undefined'

在触发事件处,简单写法只需填写对应的事件名称即可
在触发事件,也可以填写需传递的参数,在订阅事件处,则会以参数的方式传入对应callback方法

参考文档

EventHub官方文档地址

当前HarmonyOs仍在初步学习过程中,大家如果感兴趣或者有问题可以一起沟通交流
如果该文章对你有所帮助的话,可以点赞、收藏并关注一下!后续会持续更新更多技术内容

相关文章:

「HarmonyOS」EventHub事件通知详细使用方法

需求背景: 在开发过程中,肯定会出现触发特定事件,需要全局进行通知,与之相关的部分进行执行相应的修改方法。举个例子:修改了用户个人昵称,需要进行全局通知,在涉及昵称的部分收到通知后&#…...

为什么golang不支持可重入锁呢?

为什么golang不需要可重入锁? 在工程中使用锁的原因在于为了保护不变量,也可以用于保护内、外部的不变量。 基于此,Go 在互斥锁设计上会遵守这几个原则。如下: 在调用 mutex.Lock 方法时,要保证这些变量的不变性保持…...

聊一聊Tomcat的架构和运行流程,尽量通俗易懂一点

1、Tomcat的架构 这里可以看出 A、一个Tomcat就是一个Server,一个Server下会有多个Service, B、Service只负责封装多个Connector和一个Container(Service本身不是容器,可以看做只是用来包装Connector和Container的壳&#xff0c…...

ModelArts加速识别,助力新零售电商业务功能的实现

前言 如果说为客户提供最好的商品是产品眼中零售的本质,那么用户的思维是什么呢? 在用户眼中,极致的服务体验与优质的商品同等重要。 企业想要满足上面两项服务,关键在于提升效率,也就是需要有更高效率的零售&#…...

Qt/C++音视频开发65-切换声卡/选择音频输出设备/播放到不同的声音设备/声卡下拉框

一、前言 近期收到一个用户需求,要求音视频组件能够切换声卡,首先要在vlc上实现,于是马不停蹄的研究起来,马上查阅对应vlc有没有自带的api接口,查看接口前,先打开vlc播放器,看下能不能切换&…...

MySQL原理(一)架构组成之逻辑模块(1)组成

总的来说,MySQL可以看成是二层架构,第一层我们通常叫做SQL Layer,在MySQL数据库系统处理底层数据之前的所有工作都是在这一层完成的,包括权限判断,sql解析,执行计划优化,query cache的处理等等&…...

一、cadence PDK 自学笔记-心法

我这边ADS /Cadence PDK基本大部分都是自学完成的。 当然也非常感谢我的前同事周**的帮忙,教了我很多基础的。另外也感谢我现在同事,李**和程*的帮忙,学习了很多cad的视角。 其实对于自学写PDK的小伙伴,一般都要如何学习呢&…...

防御保护--NAT策略

目录 NAT策略 NAT类型 server-map表 P2P --- peer to peer 网络类型 ​编辑 目标NAT--服务器映射 双向NAT ​编辑 多出口NAT NAT策略 静态NAT --- 一对一 动态NAT --- 多对多 NAPT --- 一对多的NAPT --- easy ip --- 多对多NAPT 服务器映射 源NAT--基于源IP地址进行转…...

【C++】C++入门 — 指针空值nullptr

C入门 指针空值 指针空值 在良好的C/C编程习惯中,声明一个变量时最好给该变量一个合适的初始值,否则可能会出现 不可预料的错误,比如未初始化的指针。如果一个指针没有合法的指向,我们基本都是按照如下 方式对其进行初始化: voi…...

Vue3+Koa2实现图片上传(不再畏惧)

大家好,我是勇宝,一个热爱前端的小学生,年关将至,提前祝大家新年快乐。今天呢,我们就来好好的啃一啃图片上传,从一个前端开发者的角度来探讨一下图片上传前后端到底都做了哪些事情。 文章目录 一、技术摘要…...

wsl-ubuntu 安装 nginx

wsl-ubuntu 安装 nginx 1. 安装 nginx2. 确认 nginx 启动状态3. 重启 nginx4. 停止 nginx 1. 安装 nginx sudo apt install nginx2. 确认 nginx 启动状态 systemctl status nginx3. 重启 nginx systemctl restart nginx4. 停止 nginx systemctl stop nginx完成!…...

重学Ajax

摘要:AJAX是一个在前端的应用非常广泛技术,为什么还要谈它呢?么得办法之前学的不全面,再收拾收拾。水平有限,欢迎指正! AJAX(全称:Asynchronous JavaScript and XML)是一…...

springboot3+vue3支付宝交易案例-结算支付

springboot3vue3支付宝交易案例-结算支付!今天下午整理了一下结算的内容。遇到了很多问题。汇总分享给大家。 第一个问题:支付宝结算后,返回的交易编码,和交易时间,交易状态,都应该使用varchar来存。 第二…...

c语言 ceil() 函数

ceil()是C语言中的一个数学函数,用于向上取整。它的函数原型定义在math.h头文件中。 ceil()函数的作用是返回一个大于或等于给定参数的最小整数值,即将参数向上取整到最接近的整数。返回值的数据类型为double。 以下是ceil()函数的函数原型&#xff1a…...

virtualBox虚拟机安装ubuntu后的必要配置

1. 使能双向copy 粘贴功能。在device menu的 shared clipboard项, 选bidirectional. 2.启用共享文件夹。 在device 菜单的 shared folder 项配置, (对于日期乱码问题和命令行打不开的问题请见ubuntu18.04安装后时间日期乱码及terminal打不开解决方法_电脑日期变成…...

《Pandas 简易速速上手小册》第6章:Pandas 时间序列分析(2024 最新版)

文章目录 6.1 时间序列数据基础6.1.1 基础知识6.1.2 重点案例:股票市场分析6.1.3 拓展案例一:温度变化分析6.1.4 拓展案例二:电商平台日销售额分析 6.2 日期与时间功能6.2.1 基础知识6.2.2 重点案例:活动日志分析6.2.3 拓展案例一…...

滇西科技师范学院食堂大宗物资采购项目(冰冻制品类)招标公告

滇西科技师范学院食堂大宗物资采购项目(冰冻制品类)招标公告 (招标编号:YDZOH20240158) 项目所在地区:云南省,临沧市,市辖区 一、招标条件 本滇西科技师范学院食堂大宗物资采购项目(冰冻制品类)已由项目审批/核准/备案机关批准,项目资金来源为…...

(2024,SaFaRI,双三上采样和 DFT,空间特征和频率特征)基于扩散模型的图像空间和频率感知恢复方法

Spatial-and-Frequency-aware Restoration method for Images based on Diffusion Models 公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 3. 方法 3.1 修改数据保真度 3.2 …...

【Linux】环境基础开发工具的使用之gcc详解(二)

前言:上一篇文章中我们讲解了Linux下的vim和yum的工具的使用,今天我们将在上一次的基础上进一步的讲解开放工具的时候。 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 专栏分类:Linux的深度刨析 👈 &#x1f4a…...

go语言-用channel控制goroutine的退出

用channel控制goroutine的退出 本文简要介绍了,如何用channel控制goroutine的退出的基本方法 for-range主动停止goruitine package mainimport ("fmt""sync""time" )/* Go并发编程模型:主动停止goroutine 方法一&#…...

线程同步:确保多线程程序的安全与高效!

全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

企业如何增强终端安全?

在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...

数据分析六部曲?

引言 上一章我们说到了数据分析六部曲,何谓六部曲呢? 其实啊,数据分析没那么难,只要掌握了下面这六个步骤,也就是数据分析六部曲,就算你是个啥都不懂的小白,也能慢慢上手做数据分析啦。 第一…...

Redis上篇--知识点总结

Redis上篇–解析 本文大部分知识整理自网上,在正文结束后都会附上参考地址。如果想要深入或者详细学习可以通过文末链接跳转学习。 1. 基本介绍 Redis 是一个开源的、高性能的 内存键值数据库,Redis 的键值对中的 key 就是字符串对象,而 val…...

接口 RESTful 中的超媒体:REST 架构的灵魂驱动

在 RESTful 架构中,** 超媒体(Hypermedia)** 是一个核心概念,它体现了 REST 的 “表述性状态转移(Representational State Transfer)” 的本质,也是区分 “真 RESTful API” 与 “伪 RESTful AP…...