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文章
9249瀏覽量
148615 -
HarmonyOS
+關注
關注
80文章
2153瀏覽量
36045 -
鴻蒙OS
+關注
關注
0文章
193瀏覽量
5482
發布評論請先 登錄
相關推薦
熱點推薦
harmony-utils之JSONUtil,JSON工具類
,致力于助力開發者迅速構建鴻蒙應用。其封裝的工具涵蓋了APP、設備、屏幕、授權、通知、線程間通信
harmony-utils之LocationUtil,定位相關工具類
實用工具類,致力于助力開發者迅速構建鴻蒙應用。其封裝的工具涵蓋了APP、設備、屏幕、授權、通知、
harmony-utils之LogUtil,日志工具類
,致力于助力開發者迅速構建鴻蒙應用。其封裝的工具涵蓋了APP、設備、屏幕、授權、通知、線程間通信
harmony-utils之LRUCacheUtil,LRUCache緩存工具類
,借助眾多實用工具類,致力于助力開發者迅速構建鴻蒙應用。其封裝的工具涵蓋了APP、設備、屏幕、授
harmony-utils之NumberUtil,Number工具類
實用工具類,致力于助力開發者迅速構建鴻蒙應用。其封裝的工具涵蓋了APP、設備、屏幕、授權、通知、
harmony-utils之PreferencesUtil,首選項工具類
,借助眾多實用工具類,致力于助力開發者迅速構建鴻蒙應用。其封裝的工具涵蓋了APP、設備、屏幕、授
harmony-utils之RegexUtil,正則工具類
類,致力于助力開發者迅速構建鴻蒙應用。其封裝的工具涵蓋了APP、設備、屏幕、授權、通知、線程間
harmony-utils之ToastUtil,吐司工具類
類,致力于助力開發者迅速構建鴻蒙應用。其封裝的工具涵蓋了APP、設備、屏幕、授權、通知、線程間
harmony-utils之WantUtil,Want工具類
實用工具類,致力于助力開發者迅速構建鴻蒙應用。其封裝的工具涵蓋了APP、設備、屏幕、授權、通知、
harmony-utils之WindowUtil,窗口相關工具類
實用工具類,致力于助力開發者迅速構建鴻蒙應用。其封裝的工具涵蓋了APP、設備、屏幕、授權、通知、
harmony-utils之TempUtil,溫度轉換工具類
實用工具類,致力于助力開發者迅速構建鴻蒙應用。其封裝的工具涵蓋了APP、設備、屏幕、授權、通知、
harmony-utils之NetworkUtil,網絡相關工具類
實用工具類,致力于助力開發者迅速構建鴻蒙應用。其封裝的工具涵蓋了APP、設備、屏幕、授權、通知、
鴻蒙OS開發實例:【工具類封裝-emitter組件間通信】
評論