鸿蒙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));}
}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/774881.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

get 请求中传递数组参数

文章目录 问题分析 问题 使用get请求传参时有参数是数组 分析 qs.stringify({ a: [b, c] }, { arrayFormat: indices }) // 输出结果&#xff1a;a[0]b&a[1]c qs.stringify({ a: [b, c] }, { arrayFormat: brackets }) // 输出结果&#xff1a;a[]b&a[]c qs.stringif…

Qt C++ | QTimer经验总结

QTimer Class QTimer类提供重复计时器和单次计时器 头文件: #include <QTimer> qmake: QT += core 继承自: QObject 定时器信号 void timeout() 公共函数 Qt::TimerType 枚举定义了 Qt 中不同类型的定时器。它包含以下值: **Qt::PreciseTimer:**高精度定时器,用…

国内ip地址推荐,畅享网络新体验!

在数字化时代&#xff0c;IP地址不仅是网络连接的基石&#xff0c;也是互联网产业发展的重要标志。国内作为全球互联网市场的重要参与者&#xff0c;拥有众多IP地址资源。虎观代理小二旨在探索并推荐一些国内IP地址&#xff0c;分析它们的价值所在&#xff0c;并探讨如何更好地…

hcia datacom课程学习(4):ICMP与ping命令

1.什么是ICMP ICMP是ip协议的一部分&#xff0c;常用的ping命令就是基于icmp协议的。 在防火墙策略中也能看到ICMP&#xff0c;如果将其禁用&#xff0c;那么其他主机就ping不通该主机了 2. ICMP数据报 2.1数据报构成 ICMP协议的报文包含在IP数据报的数据部分&#xff0c; …

[windows]Windows上缩放窗体的两种方式

第一种 直接上图 第二种 第二种方式时&#xff0c;快速拖动时&#xff0c;如果是chrome浏览器套壳软件就会出现拖动部分出现黑边的现象而原生的桌面应用程序则不会出现黑边。这现象在chrome浏览器本身就存在。如图 typora是用electron写的软件存在该问题

相位解包裹前识别有效区域和无效区域(条纹和背景区域区分)

对于不连续场进行相位解包的时候,首先要识别出图象中的哪些部分为有效数据,哪些部分为非有效数据"。这不仅关乎着相位解包算法的速度,更影响着解包算法的精度。因此在解包之前,对有效区域和无效区域的判断必须是首先要做的一件事情。下面就来介绍一下什么是有效区域和…

全国地质灾害点shp崩塌滑坡泥石流空间分布地质灾害详查等数据集

地质灾害是指在自然或者人为因素的作用下形成的&#xff0c;对人类生命财产造成的损失、对环境造成破坏的地质作用或地质现象。地质灾害在时间和空间上的分布变化规律&#xff0c;既受制于自然环境&#xff0c;又与人类活动有关&#xff0c;往往是人类与自然界相互作用的结果。…

LeetCode:1319. 连通网络的操作次数(并查集 Java)

目录 1319. 连通网络的操作次数 题目描述&#xff1a; 实现代码与解析&#xff1a; 并查集 原理思路&#xff1a; 1319. 连通网络的操作次数 题目描述&#xff1a; 用以太网线缆将 n 台计算机连接成一个网络&#xff0c;计算机的编号从 0 到 n-1。线缆用 connections 表示…

基于单片机的自动浇灌系统的设计

本文设计了一款由单片机控制的自动浇灌系统。本设计的硬件电路采用AT89C51单片机作为主控芯片,采用YL-69土壤湿度传感器检测植物的湿度。通过单片机将采集湿度值与设定值分析处理后,控制报警电路和水泵浇灌电路的开启,从而实现植物的自动浇灌。 1 设计目的 随着生活水平的…

怎么批量修改文件名中的一部分?

怎么批量修改文件名中的一部分&#xff1f;批量修改文件名中的一部分文字是我们在处理大量文件时经常需要做的任务之一。这项工作可以极大地提高工作效率&#xff0c;节省宝贵的时间。无论是对于个人用户还是企业组织来说&#xff0c;都是非常实用的技能。首先&#xff0c;批量…

【Hexo + Github 搭建自己的专属博客】

目录 一、前提环境配置 1. 安装Git和NodeJS 2. 安装Hexo 3. 加载主题 4. 修改主题配置 二、搭建博客 1. 将博客部署在GitHub上 2. 写文章并上传 3. 配置一些特效 三、最终成果 ​编辑 一、前提环境配置 1. 安装Git和NodeJS 在 Windows 上使用 Git &#xff0c;可以…

【深度学习】【机器学习】用神经网络进行入侵检测,NSL-KDD数据集,基于机器学习(深度学习)判断网络入侵

文章目录 下载数据集NSL-KDD数据集介绍输入的41个特征输出的含义数据处理&&训练技巧建神经网络&#xff0c;输入41个特征&#xff0c;输出是那种类别的攻击模型训练模型推理写gradio前端界面&#xff0c;用户自己输入41个特征&#xff0c;后端用模型推理计算后显示出是…

Jenkins--在Linux上使用Docker安装

一、Jenkins 简介 Jenkins是一个流行的开源自动化服务器&#xff0c;用于持续集成和持续交付&#xff08;CI/CD&#xff09;。Jenkins的核心功能主要包括以下几点&#xff1a; 持续集成&#xff1a;Jenkins可以监控版本控制系统&#xff08;如Git、SVN&#xff09;中的代码变…

模型训练----加载自己的数据集,train.txt包含“路径,类别”

今天想训练一个restnet&#xff0c;之前我是会用文件夹的方式加载数据集&#xff0c;但是师兄给我的数据是用.txt文件划分的训练集和验证集&#xff0c;知道是要把路径和标签提取出来&#xff0c;搞了半天没搞成&#xff0c;后边找到咋搞了。 点击查看 纯真丁一郎博客点击访问…

产品经理的6个关键职责

1. 前言 本文深入探讨了产品经理的六个关键职责,全面解析了产品经理在产品开发与市场运营中的核心作用。首先,市场调研是产品经理的基础工作,通过对市场趋势、用户需求及竞争态势的深入研究,为产品决策提供有力支持。其次,产品定义及设计是产品经理的核心能力,他们需精准…

蓝桥杯:Python基础学习一

目录 一、遍历列表 1.使用for 循环和 enumerate()函数实现 2.案例代码 二、对列表进行统计和计算 1.统计数值列表的元素和 2.案例代码 三、对列表进行排序 1.使用列表对象的sort()方法 2.使用内置的 sorted()函数实现 四、列表推导式 1.从列表中选择符合条件的元素组…

Matlab|计及电池储能寿命损耗的微电网经济调度

目录 1 主要内容 储能寿命模型 负荷需求响应 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序参考文献《考虑寿命损耗的微网电池储能容量优化配置》模型&#xff0c;以购售电成本、燃料成本和储能寿命损耗成本三者之和为目标函数&#xff0c;创新考虑储能寿命损耗约…

【Java跳槽面试必备】2024年最新八股文

Java基础面试题 Java的特点 Java 与 C 的区别 JDK/JRE/JVM三者的关系 Java程序是编译执行还是解释执行&#xff1f; 面向对象和面向过程的区别&#xff1f; 面向对象有哪些特性&#xff1f; 数组到底是不是对象&#xff1f; Java的基本数据类型有哪些&#xff1f; 为什么不能用…

【python由站点数据插值到网格数据方法对比】

文章目录 1、前言2、结果对比2.1 原始散点站位图2.2 griddata插值2.3 krige插值2.4 RBF插值2.5 IDW插值 3、总结 1、前言 气象海洋中空间数据类型有站点数据、格点数据。站点数据空间分布不连续&#xff0c;不利于进行时空分析&#xff1b;有时需要将站点数据插值到网格中。本…

GEC6818开机自动加载驱动与更改开发板的RTC时钟

GEC6818开机自动加载驱动与更改开发板的RTC时钟 本文主要涉及&#xff1a; 1.GEC6818开机自动加载驱动 2.更改开发板的RTC时钟 文章目录 GEC6818开机自动加载驱动与更改开发板的RTC时钟一、开机自动加载驱动或运行程序**STEP1&#xff1a;** 使用vi打开文件profile.命令如下**S…