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

【鸿蒙 HarmonyOS NEXT】使用EventHub进行数据通信

✨本人自己开发的开源项目:土拨鼠充电系统

✨踩坑不易,还希望各位大佬支持一下,在GitHub给我点个 Start ⭐⭐👍👍

GitHub开源项目地址👉:https://github.com/cheinlu/groundhog-charging-system

一、背景

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

在项目开发中,可以通过EventHub来进行页面之间的数据通信

二、EventHub的几种方法

1、emit(event: string, ...args: Object[]): void;👉👉触发指定事件。

2、on(event: string, callback: Function): void;👉👉订阅指定事件。

3、off(event: string, callback?: Function): void;👉👉取消订阅指定事件。当callback传值时,取消订阅指定的callback;未传值时,取消订阅该事件下所有callback。

三、具体实现

需求:在EventHub1页面,点击按钮将数据message,传递给EventHub2页面

3.1、EventHub1组件通过eventHub.emit()订阅事件

@Component
export struct EventHub1 {@State message: string = 'harmony'build() {Column() {Text('EventHub1')Button('点击按钮向EventHub2发事件').onClick(() => {getContext().eventHub.emit('share', this.message) //订阅事件})}.height(100).width('100%').justifyContent(FlexAlign.Center).borderWidth(2).borderColor(Color.Red)}
}

 3.2、EventHub2组件通过eventHub.on()触发事件

@Component
export struct EventHub2 {@State shareMessage: string = ''aboutToAppear(): void {//触发事件getContext().eventHub.on('share', (message: string) => {this.shareMessage = message})}build() {Column() {Text('EventHub2')Text() {Span('接收EventHub1发送的内容:')Span(this.shareMessage).fontColor(Color.Orange).fontWeight(FontWeight.Bold)}}.height(100).width('100%').justifyContent(FlexAlign.Center).borderWidth(2).borderColor(Color.Green)}
}

3.3、实际效果

3.4、取消订阅事件

当离开页面时可以取消订阅事件,aboutToDisappear中使用eventHub.off()来进行取消,如下操作:

aboutToDisappear(): void {getContext().eventHub.off('share')}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • java 防重复提交
  • P2343 宝石管理系统
  • SpringBoot开发——整合MyBatis
  • 人工智能在C/C++中的应用
  • VitePress 自定义主题:打造专属文档网站
  • 数学建模笔记—— 整数规划和0-1规划
  • 避障小车—51单片机
  • 大数据技术体系架构
  • 为何家用无线路由器不能实现PROFINET通信?
  • EasyExcel 文件导出:表头与内容样式简单设置
  • 【Tools】什么是基座模型
  • 机械学习—零基础学习日志(Python做数据分析02)
  • ✨机器学习笔记(三)—— 多元线性回归、特征缩放、Scikit-Learn(未完待续)
  • 大腾智能出席龙华云创中心启动与鸿蒙园揭牌仪式
  • 《花100块做个摸鱼小网站! 》第六篇—将小网站部署到云服务器上
  • 网络传输文件的问题
  • 【剑指offer】让抽象问题具体化
  • CentOS7简单部署NFS
  • CentOS从零开始部署Nodejs项目
  • Effective Java 笔记(一)
  • If…else
  • input实现文字超出省略号功能
  • Javascript弹出层-初探
  • Java方法详解
  • laravel 用artisan创建自己的模板
  • Linux各目录及每个目录的详细介绍
  • orm2 中文文档 3.1 模型属性
  • Python爬虫--- 1.3 BS4库的解析器
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 力扣(LeetCode)965
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 听说你叫Java(二)–Servlet请求
  • 无服务器化是企业 IT 架构的未来吗?
  • 一个完整Java Web项目背后的密码
  • ​Java基础复习笔记 第16章:网络编程
  • ​queue --- 一个同步的队列类​
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #APPINVENTOR学习记录
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (21)起落架/可伸缩相机支架
  • (poj1.3.2)1791(构造法模拟)
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (二)windows配置JDK环境
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (四)c52学习之旅-流水LED灯
  • .gitattributes 文件
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET Core 中插件式开发实现
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .NET Micro Framework初体验
  • .NET多线程执行函数