鸿蒙 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.mzph.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…