鸿蒙ArkTs开发,后台触发数据变化后更新页面 UI事件

ops/2025/3/3 15:35:48/

文章目录

  • 1、定义全局事件管理器
  • 2、触发事件
  • 3、页面监听事件

如果你的需求是后台触发状态变化后更新页面 UI,而不是通过页面跳转传递数据,可以通过以下方式实现:
通过自定义事件管理器,后台触发事件后通知页面更新 UI。

1、定义全局事件管理器

// EventManager.ts
type EventHandler = (data: uiltin">any) => void;class EventManager {private events: Map<uiltin">string, EventHandler[]> = new Map();// 订阅事件on(eventName: uiltin">string, handler: EventHandler) {if (!this.events.has(eventName)) {this.events.set(eventName, []);}this.events.get(eventName)?.push(handler);}// 取消订阅off(eventName: uiltin">string, handler?: EventHandler) {if (handler) {const handlers = this.events.get(eventName)?.filter(h => h !== handler);if (handlers) {this.events.set(eventName, handlers);}} else {this.events.delete(eventName);}}// 发布事件emit(eventName: uiltin">string, data?: uiltin">any) {const handlers = this.events.get(eventName);if (handlers) {handlers.forEach(handler => handler(data));}}
}export const eventManager = new EventManager();

2、触发事件

// 后台逻辑(如 Service 或定时任务)
import { eventManager } from './EventManager';eventManager.emit('updateUI', { message: 'New message from background!' });

3、页面监听事件

// Page.ets
import { eventManager } from './EventManager';@Entry
@Component
struct Page {@State message: uiltin">string = 'Waiting for message...';aboutToAppear() {// 订阅事件eventManager.on('updateUI', (data) => {this.message = data.message; // 更新状态});}aboutToDisappear() {// 取消订阅eventManager.off('updateUI');}build() {Column() {Text(this.message).fontSize(20).margin(20);}.width('100%').height('100%').justifyContent(FlexAlign.Center);}
}

http://www.ppmy.cn/ops/162802.html

相关文章

【论文阅读笔记】SL-YOLO(2025/1/13) | 小目标检测 | HEPAN、C2fDCB轻量化模块

目录 摘要 1 引言 2 相关工作 3 方法 3.1 为小目标检测增加一个头 3.2 优化网络结构 3.3 改进轻量化模块 3.3.1 C2fDCB 3.3.2 SCDown 4 实验 4.1 数据集 4.2 实验环境 4.3 与其他模型的比较 4.4 消融研究 ▲不同网络结构的分析 ▲不同模块的分析 ▲不同降采样…

Conda 环境搭建实战:从基础到进阶

在当今复杂多变的软件开发与数据科学领域&#xff0c;拥有一个稳定、可复现且易于管理的开发环境是项目成功的基石。Conda 作为一款强大的跨平台环境管理与包管理工具&#xff0c;为开发者提供了便捷高效的环境搭建与依赖管理解决方案。本文将深入探讨 Conda 环境搭建的实战技巧…

基于Matlab的多目标粒子群优化

在复杂系统的设计、决策与优化问题中&#xff0c;常常需要同时兼顾多个相互冲突的目标&#xff0c;多目标粒子群优化&#xff08;MOPSO&#xff09;算法应运而生&#xff0c;作为群体智能优化算法家族中的重要成员&#xff0c;它为解决此类棘手难题提供了高效且富有创新性的解决…

Android 布局系列(五):GridLayout 网格布局的使用

引言 在 Android 开发中&#xff0c;布局管理是 UI 设计中的重要环节。随着应用界面的复杂性增加&#xff0c;开发者需要掌握各种布局方式来应对不同的需求。除了常见的 LinearLayout、RelativeLayout和ConstraintLayout&#xff0c;Android还提供了一个非常使用的布局 -- Gri…

stm32week5

stm32学习 二.外设 14.串口发送数据包 数据包的定义&#xff1a; HEX数据包(以0xFF为包头&#xff0c;0xFE为包尾&#xff0c;实际上可自定义)&#xff1a; 固定包长&#xff0c;含包头包尾可变包长&#xff0c;含包头包尾 对于数据中不会出现包头包尾的数据可以用可变包长…

Python实现GO鹅优化算法优化BP神经网络回归模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 传统BP神经网络的局限性&#xff1a;BP&#xff08;Back Propagation&#xff09;神经网络作为一种…

记录一次bug,xgplayer西瓜视频播放切进度条视频加载失败

西瓜视频的官方文档&#xff1a;西瓜播放器 大概的代码&#xff1a; <div id"video-player"></div>//初始化initXgPlayer () {this.Player new Player({id: "video-player",url: this.currentVideo.videoPath,width: "100%", heigh…

如何在Github上面上传本地文件夹

前言 直接在GitHub网址上面上传文件夹是不行的&#xff0c;需要一层一层创建然后上传&#xff0c;而且文件的大小也有限制&#xff0c;使用Git进行上传更加方便和实用 1.下载和安装Git Git - Downloads 傻瓜式安装即可 2.获取密钥对 打开自己的Github&#xff0c;创建SSH密钥&…