import Emitter from '@ohos.events.emitter';
import pasteboard from '@ohos.pasteboard';
MyEmitterUtil 是一个针对 HarmonyOS 的事件驱动编程封装类,主要用于组件间的通信和数据传递。
使用要求:
- DevEco Studio 3.1.1 Release 或更高版本
- API 版本:api 9 或更高
示例用法:
父组件绑定、解绑、向子组件发送事件:
aboutToAppear() { this.myEmitterUtil.onFather((eventData: EmitterData) = > { console.info('父组件监听结果: ', JSON.stringify(eventData)); // 判断事件类型并执行相应操作... }); } aboutToDisappear() { this.myEmitterUtil.offFather(); } // 向子组件发送事件 this.myEmitterUtil.emitChild(MyEmitterUtil.UPDATE_DETAIL, "携带的测试数据");子组件绑定、解绑、向父组件发送事件:
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");
参考文档:
请查阅 HarmonyOS 开发文档了解详细信息。
export class MyEmitterUtil {
private static readonly LOG_TAG = 'MyEmitterUtil';
private static EVENT_ID_COUNTER: number = 0; // 自动递增,生成唯一的事件ID
private 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));
}
}
审核编辑 黄宇
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
封装
+关注
关注
128文章
9146浏览量
147907 -
HarmonyOS
+关注
关注
80文章
2146浏览量
35588 -
鸿蒙OS
+关注
关注
0文章
192浏览量
5321
发布评论请先 登录
相关推荐
热点推荐
harmony-utils之JSONUtil,JSON工具类
,致力于助力开发者迅速构建鸿蒙应用。其封装的工具涵盖了APP、设备、屏幕、授权、通知、线程间通信
harmony-utils之LocationUtil,定位相关工具类
实用工具类,致力于助力开发者迅速构建鸿蒙应用。其封装的工具涵盖了APP、设备、屏幕、授权、通知、
harmony-utils之LogUtil,日志工具类
,致力于助力开发者迅速构建鸿蒙应用。其封装的工具涵盖了APP、设备、屏幕、授权、通知、线程间通信
harmony-utils之NumberUtil,Number工具类
实用工具类,致力于助力开发者迅速构建鸿蒙应用。其封装的工具涵盖了APP、设备、屏幕、授权、通知、
harmony-utils之PreferencesUtil,首选项工具类
,借助众多实用工具类,致力于助力开发者迅速构建鸿蒙应用。其封装的工具涵盖了APP、设备、屏幕、授
harmony-utils之PreviewUtil,文件预览工具类
实用工具类,致力于助力开发者迅速构建鸿蒙应用。其封装的工具涵盖了APP、设备、屏幕、授权、通知、
harmony-utils之SnapshotUtil,截图相关工具类
众多实用工具类,致力于助力开发者迅速构建鸿蒙应用。其封装的工具涵盖了APP、设备、屏幕、授权、通
harmony-utils之StrUtil,字符串工具类
,致力于助力开发者迅速构建鸿蒙应用。其封装的工具涵盖了APP、设备、屏幕、授权、通知、线程间通信
harmony-utils之ToastUtil,吐司工具类
类,致力于助力开发者迅速构建鸿蒙应用。其封装的工具涵盖了APP、设备、屏幕、授权、通知、线程间
harmony-utils之TypeUtil,类型检查工具类
实用工具类,致力于助力开发者迅速构建鸿蒙应用。其封装的工具涵盖了APP、设备、屏幕、授权、通知、
harmony-utils之WantUtil,Want工具类
实用工具类,致力于助力开发者迅速构建鸿蒙应用。其封装的工具涵盖了APP、设备、屏幕、授权、通知、
harmony-utils之NetworkUtil,网络相关工具类
实用工具类,致力于助力开发者迅速构建鸿蒙应用。其封装的工具涵盖了APP、设备、屏幕、授权、通知、

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