鴻蒙 UIAbility組件與UI的數據同步和窗口關閉

使用 EventHub 進行數據通信

在這里插入圖片描述

Stage模型概念圖

根據 Stage 模型概念圖 UIAbility 先于 ArkUI Page 創建

所以,事件要先 .on 訂閱 再 emit 發布

假如現在有頁面 Page1 和他的 UIAbility

// src/main/ets/page1ability/Page1Ability.ets
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {//通過EventHub對象在UIAbility和它加載的某個頁面間共享數據let ctx = this.contextlet hub = ctx.eventHub    //事件集中器對象//UIAbility監聽事件集市中的事件,讀取攜帶的數據hub.on('OnPage1Ability', (data:string)=>{console.log('--UIAbility監聽到頁面發布的事件,其中傳來數據:', JSON.stringify(data))})}
// src/main/ets/pages/Page1.ets
@Entry
@Component
struct Page1 {@State message: string = 'Page1';build() {Button('在事件集中器對象中發射一個事件').onClick(_=>{let ctx = getContext()let hub = ctx.eventHub  //事件集中器對象//頁面發布一個事件,并攜帶數據hub.emit('OnPage1Ability','Page1_Send_Msg')})}
}

先在 UIAbility 訂閱 on ,再在 Page1 發布事件 emit,不要反過來,不然 UIAbility 事件發布后 UI 頁面還沒生成,拿什么訂閱

使用 AppStorage 進行數據同步

應用級別的數據同步

在 HarmonyOS 應用中,最快初始化或使用 AppStorage 的位置通常是應用的入口組件(@Entry 裝飾的組件),或是通過單獨的狀態管理文件集中聲明全局狀態。

假如我現在隨便找個 UIAbility 加它的 UI 來舉例吧

忘了,介紹 2 個裝飾器先

以下是 AppStorage 的應用全局 UI 狀態存儲裝飾器對比表格,基于 HarmonyOS 官方文檔梳理:

特性@StorageProp@StorageLink
裝飾器參數key: string(常量字符串,必填)key: string(常量字符串,必填)
同步類型單向(AppStorage→ 組件)雙向(AppStorage? 組件)
數據流方向AppStorage 的值覆蓋組件本地值組件修改同步回 AppStorage,AppStorage 變更同步到所有綁定組件
允許的數據類型基礎類型、對象、數組(不支持 any、undefined/null)與@StorageProp 相同
初始值要求必須指定,若 AppStorage 無對應屬性則創建并存儲必須指定,規則同@StorageProp
本地修改行為允許本地修改,但會被 AppStorage 更新覆蓋本地修改直接觸發 AppStorage 全局更新
適用場景全局只讀配置(如主題色、語言)、設備信息需雙向交互的狀態(如用戶登錄態、購物車商品數)

// src/main/ets/page1ability/Page1Ability.ets
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {AppStorage.setOrCreate('cartCount', 99)AppStorage.setOrCreate('themeColor', '#ff13c613') // 確保全局存在}
// src/main/ets/pages/Page1.ets
import { common } from '@kit.AbilityKit'
@Entry
@Component
struct Page1 {@State message: string = 'Page1';@StorageProp('themeColor') color: string = '#ff13c613'  // 全局主題色@StorageLink('cartCount') count: number = 0  // 購物車商品數build() {Column({space:10}) {Text('當前主題色').fontColor(this.color)Button(`商品數量:${this.count}`).onClick(() => this.count++) // 可以修改}}
}

使用 LocalStorage 進行數據同步

UIAbility 級別的數據同步

介紹 2 個裝飾器先

對比項@LocalStorageProp@LocalStorageLink
同步方向單向(LocalStorage→ 組件)雙向(LocalStorage? 組件)
初始值要求必須指定,用于初始化 LocalStorage 屬性(若不存在)同左
本地修改影響本地修改不觸發回傳,會被 AppStorage 更新覆蓋本地修改自動同步至 LocalStorage,觸發全局刷新
適用場景只讀全局配置(如主題色、語言)動態交互狀態(如用戶輸入、表單數據)

例子不寫了,看官網吧

關閉窗口

import { common } from '@kit.AbilityKit'@Entry
@Component
struct Page1 {@State message: string = 'Page1';build() {Column({space:10}) {Text(this.message).fontSize(30)Button('關閉當前窗口').onClick(_=>{let ctx = getContext( ) as common.UIAbilityContext //得到頁面所在UIAbility對應的UIAbilityContextctx.terminateSelf()})Button('關閉當前應用的所有窗口,即退出程序').onClick(_=>{let ctx = getContext( ) as common.UIAbilityContextlet appCtx = ctx.getApplicationContext()appCtx.killAllProcesses()})}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/79862.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/79862.shtml
英文地址,請注明出處:http://en.pswp.cn/web/79862.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

全棧工程師實戰手冊:LuatOS日志系統開發指南!

本文聚焦LuatOS-log庫的實戰應用場景,通過完整案例演示日志模塊集成、格式定制及遠程同步方案,幫助全棧開發者構建靈活可靠的日志管理框架。下面,我們一起來認識LuatOS的log庫! 一、 log.info() log info()主要打印一些正常的…

STM32-USART串口通信(9)

一、通信接口介紹 通信的目的:將一個設備的數據傳送到另一個設備,擴展硬件系統。 當STM32想要實現一些功能,但是需要外掛一些其他模塊才能實現,這就需要在兩個設備之間連接上一根或多跟通信線,通過通信線路發送或者接…

【MoveIt 2】使用 MoveIt 任務構造器(MoveIt Task Constructor)進行拾取和放置

本教程將引導您創建一個使用 MoveIt 任務構造器規劃抓取和放置操作的包。MoveIt 任務構造器(https://github.com/moveit/moveit_task_constructor/tree/ros2/)提供了一種為包含多個不同子任務(稱為階段)的任務進行規劃的方法。如果…

破解商業綜合體清潔管理困局:商業空間AI智能保潔管理系統全場景解決方案

方案整體概述 隨著商業綜合體日益向智能化、精細化管理轉型,傳統保潔工作面臨人員監管難、清潔效果評估難、應急響應滯后等諸多挑戰。為解決這些痛點,本系統依托計算機視覺、行為識別、圖像分割與深度學習等AI技術,構建一套集人員管理、工作…

spring響應式編程系列:異步消費數據

目錄 示例 大致流程 parallel cache PARALLEL_SUPPLIER newParallel init publishOn new MonoSubscribeOnValue ???????subscribe ???????new LambdaMonoSubscriber ???????MonoSubscribeOnValue.subscribe ???????onSubscribe ??…

視頻編解碼學習十二之Android疑點

一、android.view.SurfaceControl.setDisplaySurface的作用 android.view.SurfaceControl.setDisplaySurface 是 Android 系統中一個 native 層級別的 API,主要用于 設置某個物理顯示屏(Display)的輸出 Surface,屬于 SurfaceFlin…

家用或辦公 Windows 電腦玩人工智能開源項目配備核顯的必要性(含 NPU 及顯卡類型補充)

一、GPU 與顯卡的概念澄清 首先需要明確一個容易誤解的概念:GPU 不等同于顯卡。 顯卡和GPU是兩個不同的概念。 【概念區分】 在討論圖形計算領域時,需首先澄清一個常見誤區:GPU(圖形處理單元)與顯卡(視…

Python----神經網絡(《Deep Residual Learning for Image Recognition》論文和ResNet網絡結構)

一、論文 1.1、論文基本信息 標題:Deep Residual Learning for Image Recognition 作者:Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun 單位:Microsoft Research 會議:CVPR 2016 主要貢獻:提出了一種深度殘…

Qt/C++開發監控GB28181系統/錄像文件查詢/錄像回放/倍速播放/錄像文件下載

一、前言 搞定了實時預覽后,另一個功能就是錄像回放,錄像回放和視頻點播功能完全一致,唯一的區別就是發送點播的sdp信息中攜帶了開始時間和結束時間,因為是錄像文件,所以有這個時間,而實時視頻預覽這個對應…

在Spark搭建YARN

(一)什么是SparkONYarn模式 Spark on YARN(Yet Another Resource Negotiator)是 Spark 框架在 Hadoop 集群中運行的一種部署模式,它借助 Hadoop YARN 來管理資源和調度任務。 架構組成 ResourceManager:作…

SpringAI

機器學習: 定義:人工智能的子領域,通過數據驅動的方法讓計算機學習規律,進行預測或決策。 核心方法: 監督學習(如線性回歸、SVM)。 無監督學習(如聚類、降維)。 強化學…

如何用Redis實現分布式鎖?RedLock算法的核心思想?Redisson的看門狗機制原理?

一、Redis分布式鎖基礎實現 public class RedisDistributedLock {private JedisPool jedisPool;private String lockKey;private String clientId;private int expireTime 30; // 默認30秒public boolean tryLock() {try (Jedis jedis jedisPool.getResource()) {// NX表示不…

前端面試寶典---js垃圾回收機制

什么是垃圾回收 垃圾回收是指一種自動內存管理機制,當聲明一個變量時,會在內存中開辟一塊內存空間用于存放這個變量。當這個變量被使用過后,可能再也不需要它了,此時垃圾回收器會自動檢測并回收這些不再使用的內存空間。垃圾回收…

阿里媽媽LMA2新進展:集成大語言模型與電商知識的通用召回大模型URM

近日,阿里媽媽在國際頂級學術會議 —— 國際萬維網大會(International World Wide Web Conference, 簡稱WWW)上共同主持了計算廣告算法技術相關的Tutorial(講座),介紹了計算廣告領域的技術發展脈絡&#xf…

數字孿生實時監控汽車零部件工廠智能化巡檢新范式

在汽車制造業面臨數字化轉型時,汽車零部件工廠也面臨著提升生產效率、降低運營成本和增強市場競爭力的多重挑戰。傳統的巡檢方式已經難以滿足現代工廠對高效、精準管理和實時決策的需求。數字孿生系統的出現,為汽車零部件工廠提供了一種創新的智能化巡檢…

【計算機網絡】3數據鏈路層②

1. 數據鏈路層所處的地位 數據鏈路層使用的信道主要有兩種: ①點對點信道:PPP協議 ②廣播信道:有線局域網,CSMA/CD協議;無線局域網,CSMA/CA協議 對比項點對點信道 vs 單播廣播信道 vs 廣播核心是否一致? 一致(一對一傳輸)? 一致(一對所有傳輸)差異點前者是物理層…

c++中的函數(默認參數,占位參數,重載)

1&#xff0c;函數默認參數 在c中&#xff0c;函數的形參列表中的形參是可以有默認值得 語法&#xff1a;返回值類型 函數名 &#xff08;參數 默認值&#xff09;{} 示例&#xff1a; #include<iostream> using namespace std;//函數默認參數 // 就是如果傳了就…

【原創】使用阿里云存放一個臨時共享的文件

在某些場合&#xff0c;需要臨時將一個文件存儲到一個可被公網訪問的地方&#xff0c;某個服務需要訪問一下這個文件。這個文件基本上就是一次壽命&#xff0c;也就是你上傳一下&#xff0c;然后被訪問一下&#xff0c;這個文件的壽命就結束了。 對于這種需求&#xff0c;自建…

Python中列表(list)知識詳解(2)和注意事項以及應用示例

在 Python 中列表&#xff08;list&#xff09; 的包括其結構、常見操作&#xff08;更新、添加、刪除、查找、隊列棧行為等&#xff09;&#xff0c;下面將逐一的進行講解并附相關的示例。 一、列表的基礎知識 1. 定義與特點 定義方式&#xff1a;用 [] 包裹的有序可變集合 …

vscode extention踩坑記

# npx vsce package --allow-missing-repository --no-dependencies #耗時且不穩定 npx vsce package --allow-missing-repository #用這行 code --install-extension $vsixFileName --force我問ai&#xff1a;為什么我的.vsix文件大了那么多 ai答&#xff1a;因為你沒有用 --n…