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");
参考文档:
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));
}
}
审核编辑 黄宇
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
封装
+关注
关注
126文章
7778浏览量
142718 -
HarmonyOS
+关注
关注
79文章
1967浏览量
30013 -
鸿蒙OS
+关注
关注
0文章
188浏览量
4367
发布评论请先 登录
相关推荐
鸿蒙OS崛起,鸿蒙应用开发工程师成市场新宠
beta版,为开发者提供了一整套的开发工具和资源,极大地提高了开发效率。
据了解,通过蚂蚁数科mPaaS提供的模块化工具和组件,
发表于 04-29 17:32
鸿蒙OS开发实例:【HarmonyHttpClient】网络框架
鸿蒙上使用的Http网络框架,里面包含纯Java实现的HttpNet,类似okhttp使用,支持同步和异步两种请求方式;还有鸿蒙版retrofit,和Android版Retrofit相似的使用,解放双手般优雅使用注解、自动解析json
鸿蒙OS开发实例:【组件化模式】
组件化一直是移动端比较流行的开发方式,有着编译运行快,业务逻辑分明,任务划分清晰等优点,针对Android端的组件化;与Android端的组件化相比,HarmonyOS的
鸿蒙OS开发实例:【应用状态变量共享】
平时在开发的过程中,我们会在应用中共享数据,在不同的页面间共享信息。虽然常用的共享信息,也可以通过不同页面中组件间信息共享的方式,但有时使用应用级别的状态管理会让
鸿蒙OS开发实例:【工具类封装-页面路由】
import common from '@ohos.app.ability.common';
import router from '@ohos.router'封装app内的页面之间跳转、app与app之间的跳转工具
鸿蒙OS开发实例:【工具类封装-http请求】
;@ohos.promptAction';**
**封装HTTP接口请求类,提供格式化的响应信息输出功能。
使用 DevEco Studio 3.1.1 Release 及以上版本,API 版本为 api 9 及以上
鸿蒙实战项目开发:【短信服务】
两位前阿里高级研发工程师联合打造的 《鸿蒙NEXT星河版OpenHarmony开发文档》 里面内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用
发表于 03-03 21:29
鸿蒙开发OpenHarmony组件复用案例
;
......
}
开发实践
我们看下组件复用的实际使用案例。示例中,会创建一个图片列表页面,使用懒加载LazyForEach,以及组件复用能力。
创建数据源
首先,创建了一个业务对象类
发表于 01-15 17:37
鸿蒙开发基础-Web组件之cookie操作
})
...
}
...
本文章主要是对鸿蒙开发当中ArkTS语言的基础应用实战,Web组件里的cookie操作。更多的鸿蒙应用开发技
发表于 01-14 21:31
评论