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文章
7779瀏覽量
142719 -
HarmonyOS
+關注
關注
79文章
1967瀏覽量
30016 -
鴻蒙OS
+關注
關注
0文章
188瀏覽量
4368
發布評論請先 登錄
相關推薦
鴻蒙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
評論