import Emitter from '@ohos.events.emitter';
import pasteboard from '@ohos.pasteboard';
MyEmitterUtil 是一個針對 HarmonyOS 的事件驅(qū)動編程封裝類,主要用于組件間的通信和數(shù)據(jù)傳遞。
使用要求:
- DevEco Studio 3.1.1 Release 或更高版本
- API 版本:api 9 或更高
示例用法:
父組件綁定、解綁、向子組件發(fā)送事件:
aboutToAppear() { this.myEmitterUtil.onFather((eventData: EmitterData) = > { console.info('父組件監(jiān)聽結(jié)果: ', JSON.stringify(eventData)); // 判斷事件類型并執(zhí)行相應(yīng)操作... }); } aboutToDisappear() { this.myEmitterUtil.offFather(); } // 向子組件發(fā)送事件 this.myEmitterUtil.emitChild(MyEmitterUtil.UPDATE_DETAIL, "攜帶的測試數(shù)據(jù)");子組件綁定、解綁、向父組件發(fā)送事件:
aboutToAppear() { this.myEmitterUtil.onChild((eventData: EmitterData) = > { console.info('子組件監(jiān)聽結(jié)果: ', JSON.stringify(eventData)); // 判斷事件類型并執(zhí)行相應(yīng)操作... }); } aboutToDisappear() { this.myEmitterUtil.offChild(); } // 向父組件發(fā)送事件 this.myEmitterUtil.emitFather(MyEmitterUtil.UPDATE_LIST, "測試"); this.myEmitterUtil.emitFather(MyEmitterUtil.UPDATE_LIST_2, "測試2");
參考文檔:
請查閱 HarmonyOS 開發(fā)文檔了解詳細(xì)信息。
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}`);
}
// 定義業(yè)務(wù)狀態(tài)標(biāo)識常量
static readonly UPDATE_LIST = "UPDATE_LIST";
static readonly UPDATE_LIST_2 = "UPDATE_LIST_2";
static readonly UPDATE_DETAIL = "UPDATE_DETAIL";
/**
* 在組件的`aboutToAppear`生命周期鉤子中調(diào)用,監(jiān)聽父組件事件
* @param callback 事件回調(diào)函數(shù),接受一個`EmitterData`對象作為參數(shù)
*/
onFather(callback: (eventData: EmitterData) = > void) {
Emitter.on({ eventId: this.eventIdFather }, (event) = > {
if (callback) {
callback(new EmitterData(event.data.flag, event.data.data));
}
});
}
/**
* 在組件的`aboutToDisappear`生命周期鉤子中調(diào)用,解除父組件事件監(jiān)聽
*/
offFather() {
Emitter.off(this.eventIdFather);
}
/**
* 在組件的`aboutToAppear`生命周期鉤子中調(diào)用,監(jiān)聽子組件事件
* @param callback 事件回調(diào)函數(shù),接受一個`EmitterData`對象作為參數(shù)
*/
onChild(callback: (eventData: EmitterData) = > void) {
Emitter.on({ eventId: this.eventIdChild }, (event) = > {
if (callback) {
callback(new EmitterData(event.data.flag, event.data.data));
}
});
}
/**
* 在組件的`aboutToDisappear`生命周期鉤子中調(diào)用,解除子組件事件監(jiān)聽
*/
offChild() {
Emitter.off(this.eventIdChild);
}
/**
* 向父組件發(fā)送事件
* @param flag 事件類型標(biāo)識
* @param data 事件攜帶的數(shù)據(jù)
*/
emitFather(flag: string, data: string) {
Emitter.emit(
{ eventId: this.eventIdFather, priority: Emitter.EventPriority.IMMEDIATE },
{ data: { flag, data } }
);
}
/**
* 向子組件發(fā)送事件
* @param flag 事件類型標(biāo)識
* @param data 事件攜帶的數(shù)據(jù)
*/
emitChild(flag: string, data: string) {
Emitter.emit(
{ eventId: this.eventIdChild, priority: Emitter.EventPriority.IMMEDIATE },
{ data: { flag, data } }
);
}
}
/**
* 用于封裝事件數(shù)據(jù)的類
*/
export class EmitterData {
flag: string = "";
data: string = "";
constructor(flag: string, data: string) {
this.flag = flag;
this.data = data;
}
}
/**
* 獲取剪貼板內(nèi)容的輔助函數(shù)
*/
export async function getPasteboardContent(): Promise< void > {
try {
const systemPasteboard = pasteboard.getSystemPasteboard();
const pasteData = await systemPasteboard.getData();
const text = pasteData.getPrimaryText();
console.info('剪貼板內(nèi)容: ', text);
} catch (e) {
console.error('獲取剪貼板內(nèi)容失敗: ', JSON.stringify(e));
}
}
審核編輯 黃宇
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
封裝
+關(guān)注
關(guān)注
128文章
9258瀏覽量
148691 -
HarmonyOS
+關(guān)注
關(guān)注
80文章
2153瀏覽量
36077 -
鴻蒙OS
+關(guān)注
關(guān)注
0文章
193瀏覽量
5496
發(fā)布評論請先 登錄
相關(guān)推薦
熱點推薦
【HarmonyOS 5】金融應(yīng)用開發(fā)鴻蒙組件實踐
【HarmonyOS 5】金融應(yīng)用開發(fā)鴻蒙組件實踐 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##
harmony-utils之EmitterUtil,Emitter工具類
harmony-utils之EmitterUtil,Emitter工具類
harmony-utils之JSONUtil,JSON工具類
,致力于助力開發(fā)者迅速構(gòu)建鴻蒙應(yīng)用。其封裝的工具涵蓋了APP、設(shè)備、屏幕、授權(quán)、通知、線程間通信
harmony-utils之LocationUtil,定位相關(guān)工具類
實用工具類,致力于助力開發(fā)者迅速構(gòu)建鴻蒙應(yīng)用。其封裝的工具涵蓋了APP、設(shè)備、屏幕、授權(quán)、通知、
harmony-utils之LogUtil,日志工具類
,致力于助力開發(fā)者迅速構(gòu)建鴻蒙應(yīng)用。其封裝的工具涵蓋了APP、設(shè)備、屏幕、授權(quán)、通知、線程間通信
harmony-utils之LRUCacheUtil,LRUCache緩存工具類
,借助眾多實用工具類,致力于助力開發(fā)者迅速構(gòu)建鴻蒙應(yīng)用。其封裝的工具涵蓋了APP、設(shè)備、屏幕、授
harmony-utils之PreviewUtil,文件預(yù)覽工具類
實用工具類,致力于助力開發(fā)者迅速構(gòu)建鴻蒙應(yīng)用。其封裝的工具涵蓋了APP、設(shè)備、屏幕、授權(quán)、通知、
harmony-utils之RegexUtil,正則工具類
類,致力于助力開發(fā)者迅速構(gòu)建鴻蒙應(yīng)用。其封裝的工具涵蓋了APP、設(shè)備、屏幕、授權(quán)、通知、線程間
harmony-utils之StrUtil,字符串工具類
,致力于助力開發(fā)者迅速構(gòu)建鴻蒙應(yīng)用。其封裝的工具涵蓋了APP、設(shè)備、屏幕、授權(quán)、通知、線程間通信
harmony-utils之ToastUtil,吐司工具類
類,致力于助力開發(fā)者迅速構(gòu)建鴻蒙應(yīng)用。其封裝的工具涵蓋了APP、設(shè)備、屏幕、授權(quán)、通知、線程間
harmony-utils之TypeUtil,類型檢查工具類
實用工具類,致力于助力開發(fā)者迅速構(gòu)建鴻蒙應(yīng)用。其封裝的工具涵蓋了APP、設(shè)備、屏幕、授權(quán)、通知、
harmony-utils之WantUtil,Want工具類
實用工具類,致力于助力開發(fā)者迅速構(gòu)建鴻蒙應(yīng)用。其封裝的工具涵蓋了APP、設(shè)備、屏幕、授權(quán)、通知、
harmony-utils之WindowUtil,窗口相關(guān)工具類
實用工具類,致力于助力開發(fā)者迅速構(gòu)建鴻蒙應(yīng)用。其封裝的工具涵蓋了APP、設(shè)備、屏幕、授權(quán)、通知、
harmony-utils之SHA,SHA工具類
助力開發(fā)者迅速構(gòu)建鴻蒙應(yīng)用。其封裝的工具涵蓋了APP、設(shè)備、屏幕、授權(quán)、通知、線程間通信、彈框、
harmony-utils之TempUtil,溫度轉(zhuǎn)換工具類
實用工具類,致力于助力開發(fā)者迅速構(gòu)建鴻蒙應(yīng)用。其封裝的工具涵蓋了APP、設(shè)備、屏幕、授權(quán)、通知、
鴻蒙OS開發(fā)實例:【工具類封裝-emitter組件間通信】
評論