鸿蒙OS开发实例:【工具类封装-emitter组件间通信】

2024-03-28 03:28

本文主要是介绍鸿蒙OS开发实例:【工具类封装-emitter组件间通信】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 import Emitter from '@ohos.events.emitter'; import pasteboard from '@ohos.pasteboard';

MyEmitterUtil 是一个针对 HarmonyOS 的事件驱动编程封装类,主要用于组件间的通信和数据传递。

使用要求:

  • DevEco Studio 3.1.1 Release 或更高版本
  • API 版本:api 9 或更高

示例用法:

  1. 父组件绑定、解绑、向子组件发送事件:

    aboutToAppear() {this.myEmitterUtil.onFather((eventData: EmitterData) => {console.info('父组件监听结果: ', JSON.stringify(eventData));// 判断事件类型并执行相应操作...});
    }aboutToDisappear() {this.myEmitterUtil.offFather();}// 向子组件发送事件this.myEmitterUtil.emitChild(MyEmitterUtil.UPDATE_DETAIL, "携带的测试数据");
  2. 子组件绑定、解绑、向父组件发送事件:

   aboutToAppear() {this.myEmitterUtil.onChild((eventData: EmitterData) => {console.info('子组件监听结果: ', JSON.stringify(eventData));// 判断事件类型并执行相应操作...});}aboutToDisappear() {this.myEmitterUtil.offChild();}// 向父组件发送事件this.myEmitterUtil.emitFather(MyEmitterUtil.UPDATE_LIST, "测试");this.myEmitterUtil.emitFather(MyEmitterUtil.UPDATE_LIST_2, "测试2");
鸿蒙OS开发更多内容↓点击HarmonyOS与OpenHarmony技术
鸿蒙技术文档开发知识更新库gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md在这。或+mau123789学习,是v喔

搜狗高速浏览器截图20240326151547.png

参考文档:

请查阅 HarmonyOS 开发文档了解详细信息。

export class MyEmitterUtil {private static readonly LOG_TAG = 'MyEmitterUtil';private static EVENT_ID_COUNTER: number = 0; // 自动递增,生成唯一的事件IDprivate readonly eventIdFather: number;private readonly eventIdChild: number;constructor() {this.eventIdFather = MyEmitterUtil.EVENT_ID_COUNTER++;this.eventIdChild = MyEmitterUtil.EVENT_ID_COUNTER++;console.info(`事件ID(父组件): ${this.eventIdFather}`);console.info(`事件ID(子组件): ${this.eventIdChild}`);}// 定义业务状态标识常量static readonly UPDATE_LIST = "UPDATE_LIST";static readonly UPDATE_LIST_2 = "UPDATE_LIST_2";static readonly UPDATE_DETAIL = "UPDATE_DETAIL";/*** 在组件的`aboutToAppear`生命周期钩子中调用,监听父组件事件* @param callback 事件回调函数,接受一个`EmitterData`对象作为参数*/onFather(callback: (eventData: EmitterData) => void) {Emitter.on({ eventId: this.eventIdFather }, (event) => {if (callback) {callback(new EmitterData(event.data.flag, event.data.data));}});}/*** 在组件的`aboutToDisappear`生命周期钩子中调用,解除父组件事件监听*/offFather() {Emitter.off(this.eventIdFather);}/*** 在组件的`aboutToAppear`生命周期钩子中调用,监听子组件事件* @param callback 事件回调函数,接受一个`EmitterData`对象作为参数*/onChild(callback: (eventData: EmitterData) => void) {Emitter.on({ eventId: this.eventIdChild }, (event) => {if (callback) {callback(new EmitterData(event.data.flag, event.data.data));}});}/*** 在组件的`aboutToDisappear`生命周期钩子中调用,解除子组件事件监听*/offChild() {Emitter.off(this.eventIdChild);}/*** 向父组件发送事件* @param flag 事件类型标识* @param data 事件携带的数据*/emitFather(flag: string, data: string) {Emitter.emit({ eventId: this.eventIdFather, priority: Emitter.EventPriority.IMMEDIATE },{ data: { flag, data } });}/*** 向子组件发送事件* @param flag 事件类型标识* @param data 事件携带的数据*/emitChild(flag: string, data: string) {Emitter.emit({ eventId: this.eventIdChild, priority: Emitter.EventPriority.IMMEDIATE },{ data: { flag, data } });}
}/*** 用于封装事件数据的类*/
export class EmitterData {flag: string = "";data: string = "";constructor(flag: string, data: string) {this.flag = flag;this.data = data;}
}/*** 获取剪贴板内容的辅助函数*/
export async function getPasteboardContent(): Promise<void> {try {const systemPasteboard = pasteboard.getSystemPasteboard();const pasteData = await systemPasteboard.getData();const text = pasteData.getPrimaryText();console.info('剪贴板内容: ', text);} catch (e) {console.error('获取剪贴板内容失败: ', JSON.stringify(e));}
}

鸿蒙知识持续更新中,关注我点赞不迷路喔!

这篇关于鸿蒙OS开发实例:【工具类封装-emitter组件间通信】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/854312

相关文章

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

sqlite3 命令行工具使用指南

《sqlite3命令行工具使用指南》本文系统介绍sqlite3CLI的启动、数据库操作、元数据查询、数据导入导出及输出格式化命令,涵盖文件管理、备份恢复、性能统计等实用功能,并说明命令分类、SQL语... 目录一、启动与退出二、数据库与文件操作三、元数据查询四、数据操作与导入导出五、查询输出格式化六、实用功

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

SQLite3命令行工具最佳实践指南

《SQLite3命令行工具最佳实践指南》SQLite3是轻量级嵌入式数据库,无需服务器支持,具备ACID事务与跨平台特性,适用于小型项目和学习,sqlite3.exe作为命令行工具,支持SQL执行、数... 目录1. SQLite3简介和特点2. sqlite3.exe使用概述2.1 sqlite3.exe