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");
鸿蒙OS开发 | 更多内容↓点击 | HarmonyOS与OpenHarmony技术 |
---|---|---|
鸿蒙技术文档 | 开发知识更新库gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md在这。 | 或+mau123789学习,是v喔 |
参考文档:
请查阅 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));}
}