import Emitter from '@ohos.events.emitter';
import pasteboard from '@ohos.pasteboard';
MyEmitterUtil
是一個(gè)針對(duì) HarmonyOS 的事件驅(qū)動(dòng)編程封裝類,主要用于組件間的通信和數(shù)據(jù)傳遞。
使用要求:
- DevEco Studio 3.1.1 Release 或更高版本
- API 版本:api 9 或更高
示例用法:
父組件綁定、解綁、向子組件發(fā)送事件:
aboutToAppear() { this.myEmitterUtil.onFather((eventData: EmitterData) = > { console.info('父組件監(jiān)聽(tīng)結(jié)果: ', JSON.stringify(eventData)); // 判斷事件類型并執(zhí)行相應(yīng)操作... }); } aboutToDisappear() { this.myEmitterUtil.offFather(); } // 向子組件發(fā)送事件 this.myEmitterUtil.emitChild(MyEmitterUtil.UPDATE_DETAIL, "攜帶的測(cè)試數(shù)據(jù)");
子組件綁定、解綁、向父組件發(fā)送事件:
aboutToAppear() { this.myEmitterUtil.onChild((eventData: EmitterData) = > { console.info('子組件監(jiān)聽(tīng)結(jié)果: ', JSON.stringify(eventData)); // 判斷事件類型并執(zhí)行相應(yīng)操作... }); } aboutToDisappear() { this.myEmitterUtil.offChild(); } // 向父組件發(fā)送事件 this.myEmitterUtil.emitFather(MyEmitterUtil.UPDATE_LIST, "測(cè)試"); this.myEmitterUtil.emitFather(MyEmitterUtil.UPDATE_LIST_2, "測(cè)試2");
參考文檔:
請(qǐng)查閱 HarmonyOS 開(kāi)發(fā)文檔了解詳細(xì)信息。
export class MyEmitterUtil {
private static readonly LOG_TAG = 'MyEmitterUtil';
private static EVENT_ID_COUNTER: number = 0; // 自動(dòng)遞增,生成唯一的事件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)識(shí)常量
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)聽(tīng)父組件事件
* @param callback 事件回調(diào)函數(shù),接受一個(gè)`EmitterData`對(duì)象作為參數(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)聽(tīng)
*/
offFather() {
Emitter.off(this.eventIdFather);
}
/**
* 在組件的`aboutToAppear`生命周期鉤子中調(diào)用,監(jiān)聽(tīng)子組件事件
* @param callback 事件回調(diào)函數(shù),接受一個(gè)`EmitterData`對(duì)象作為參數(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)聽(tīng)
*/
offChild() {
Emitter.off(this.eventIdChild);
}
/**
* 向父組件發(fā)送事件
* @param flag 事件類型標(biāo)識(shí)
* @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)識(shí)
* @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));
}
}
審核編輯 黃宇
-
封裝
+關(guān)注
關(guān)注
125文章
7593瀏覽量
142145 -
HarmonyOS
+關(guān)注
關(guān)注
79文章
1946瀏覽量
29739 -
鴻蒙OS
+關(guān)注
關(guān)注
0文章
188瀏覽量
4336
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論