鸿蒙自定义弹出框响应式更新数据

news/2025/9/26 9:49:21/文章来源:https://www.cnblogs.com/LylePark/p/19112924

鸿蒙自定义弹出框响应式更新数据

1.原因:

openCustomDialog不支持自定义组件使用@Reusable@Link@Provide@Consume等装饰器,来同步弹出框弹出的页面与ComponentContent中自定义组件的状态

2.解决

class Params { // 要调用@Component里面的方法需要使用参数接收onClose?: () => void; // 关闭弹窗方法selStockroom?: (index:number) => void; // 选择方法stockroomList: IPartsStockItem[]; // 数据传入constructor(onClose?: () => void, stockroomList?: IPartsStockItem[], selStockroom?: (index:number) => void) { // 通过constructor接收this.onClose = onClose;this.stockroomList = stockroomList || [];this.selStockroom = selStockroom}
}@Builder
function shareDialog(params: Params) { // 弹框主体Column() {Row() {Text('请选择仓库').fontColor('#333').fontSize(fts('33lpx')).margin({ bottom: '40lpx' })}.width('100%').justifyContent(FlexAlign.Center)Column() {ForEach(params.stockroomList, (item: IPartsStockItem, i: number) => {Flex({ justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.Center }) {Text(item.name).fontSize(fts("32lpx"))if (item.selected) {Image($rawfile("icon/fukuanzhong_ico_select.png")).width("32lpx").height("32lpx")} else {Image($rawfile("icon/fukuanzhong_ico_noselect.png")).width("32lpx").height("32lpx")}}.onClick(() => {params.selStockroom?.(i) // 通过params调用@Component方法}).margin({ bottom: "24lpx" })})}}.backgroundColor('#FFFFFF').width('70%').padding('60lpx').borderRadius('20lpx')
}
@Component
export struct PartsCollection {
  
controller: SearchController = new SearchController();
  @State stockroomList: IPartsStockItem[] = []
  private contentNode: ComponentContent<Object> =
  new ComponentContent(this.ctx, wrapBuilder(shareDialog), new Params((): void => this.closeDialog(), this.stockroomList)) // 创建conetntNode,此时不可以传入异步数据,否则会是undefined
  private options: promptAction.BaseDialogOptions = { alignment: DialogAlignment.Center, offset: { dx: 0, dy: 50 } } // 设置弹框显示位置

openDialog() {
if (this.contentNode !== null) {
// 确保传递正确的参数类型
this.contentNode = new ComponentContent(
this.ctx,
wrapBuilder(shareDialog),
new Params((): void => this.closeDialog(), this.stockroomList, (index:number): void => this.selStockroom(index)) // 此时可以传入异步数据
);
this.ctx.getPromptAction()
.openCustomDialog(this.contentNode, this.options)
.then(() => {
Log.info('OpenCustomDialog complete.')
})
.catch((error: BusinessError) => {
let message = (error as BusinessError).message;
let code = (error as BusinessError).code;
Log.error(`OpenCustomDialog args error code is ${code}, message is ${message}`);
})
}
}

closeDialog() {
if (this.contentNode !== null) {
this.ctx.getPromptAction()
.closeCustomDialog(this.contentNode)
.then(() => {
Log.info('closeCustomDialog complete.')
})
.catch((error: BusinessError) => {
let message = (error as BusinessError).message;
let code = (error as BusinessError).code;
Log.error(`closeCustomDialog args error code is ${code}, message is ${message}`);
})
}
}

selStockroom(index: number) {
const arr = [...this.stockroomList]
for (let i = 0; i < arr.length; i++) {
arr[i].selected = index == i;
}
this.stockroomList = arr // 修改了传入的数据
if (this.contentNode) {
this.contentNode.update( // 动态修改传入的数据,让数据更新达到响应式效果
new Params(
(): void => this.closeDialog(),
this.stockroomList, // 传递已更新的列表
(index: number): void => this.selStockroom(index)
)
);
}
}

}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/918066.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CCS开发环境和TMS320系列DSP实现IP-IQ谐波与无功电流检测

CCS开发环境和TMS320系列DSP实现IP-IQ谐波与无功电流检测一、系统架构设计 1. 硬件组成 +-------------------+| 三相电网 || (电压/电流互感器) |+--------+----------+|v +-------------------+ +---…

深入解析:Python数据分析:求矩阵的秩。啥是矩阵秩?听故事学线代并用Python实现,娘来太容易学会了!

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

多机动模型PHD滤波算法

一、算法框架与核心思想 多机动模型PHD(Probability Hypothesis Density)滤波结合了交互多模型(IMM)与概率假设密度滤波的优势,通过动态模型切换实现多机动目标跟踪。 关键特性:多模型交互:每个粒子携带模型索引…

Navicat17无限试用重置14天

若navicat 17安装后无法正常注册,则可以尝试以下方法。 把以下文本另存为.bat文件,每次执行,都会将试用剩余天数重置为14天,实现无限试用的目的。 本脚本主要以测试学习为目的用后请及时删除,如果需要请购买正版.…

基于Electron的Web打印解决方案:web-print-pdf技术分享

引言 在Web应用开发中,打印功能一直是一个令人头疼的问题。传统的Web打印方案存在样式丢失、兼容性差、功能单一等诸多痛点。最近偶然发现了一个名为web-print-pdf的npm包,在调查了几款常见的Web打印实现后,发现大多…

CF455D Serega and Fun

洛谷传送 看起来很能分块啊!然后一个分块吧唧一下拍上去就过了。 好的我们还是来看看平衡树做法。 我们考虑每次操作是什么。发现其实是把 \(a_r\) 的位置移到了 \(a_l\) 的前面,\(a_i\sim a_{r-1}\) 内的所有元素向…

实验任务1

实验任务1实验任务11 #include<stdio.h> 2 int main() 3 { 4 printf(" O \n"); 5 printf("<H>\n"); 6 printf("I I\n"); 7 return 0; 8 }View Code 截图task 21 #include&l…

实验任务

实验任务实验任务11 #include <stdio.h>2 int main()3 {4 printf(" O \n");5 printf("<H>\n");6 printf("I I\n");7 printf(" O \n");8 pri…

61.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--新增功能--提取金额 - 实践

61.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--新增功能--提取金额 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important…

使用 Ansible 部署 Elasticsearch 集群

使用 Ansible 部署 Elasticsearch 集群1. 集群规划 1.1 服务器列表IP 主机名 内存(GB) CPU核数 磁盘 操作系统 CPU 架构 备注11.0.0.11 arc-dev-dc01 8 1 500GB CentOS 7.9.2009 x86_64 Ansible 管理机,无法访问互联…

免费无广告!这款开源工具让文件转换像复制粘贴一样简单!

FileConverter —— 一个非常简单的工具,通过使用 Windows 资源管理器的上下文菜单转换和压缩一个或多个文件。大家好,我是 Java陈序员。 之前,给大家介绍一款格式转换全能王,支持超过一千多种的文件格式转换。 格…

时序InSAR形变结果合并操作说明 - ENVI

采用PS-InSAR或SBAS-InSAR对同一个地区得到不同时间段内的形变结果,有时候我们需要将这些不同时间段内形变结果进行合并,得到以最早时间点为基准、覆盖整个时间跨度的形变结果。 SARscape从5.5.3版本开始提供栅格或矢…

建设网站的基本技术网络规划设计师教程pdf

主题 进程同步与进程互斥 01进程同步 问题在多道批处理系统中&#xff0c;多个进程是并发执行的&#xff0c;而并发执行的进程具有异步性&#xff0c;也就是说&#xff0c;各个进程以各自独立的、不可预知的速度向前推进。这样会带来什么问题呢&#xff1f;如果有 AB…

北京建网站需要多少钱动漫网站html

一、 python语法 1. 请说一下你对迭代器和生成器的区别&#xff1f; 2. 什么是线程安全&#xff1f; 3. 你所遵循的代码规范是什么&#xff1f;请举例说明其要求&#xff1f; 4. Python中怎么简单的实现列表去重&#xff1f; 5. python 中 yield 的用法…

深圳seo网站优化公司360公司官网首页

Unity3D 小案例 像素贪吃蛇 第二期 蛇的觅食 像素贪吃蛇 食物生成 在场景中创建一个 2D 正方形&#xff0c;调整颜色&#xff0c;添加 Tag 并修改为 Food。 然后拖拽到 Assets 文件夹中变成预制体。 创建食物管理器 FoodManager.cs&#xff0c;添加单例&#xff0c;可以设置…

网站建设软硬件要求江西省建设招标网站

一 ISN序列号探究 本文主要探究三次握手建立TCP连接的细节备注&#xff1a; 某些问题探究的比较深入,当前用不到,暂时通过链接引入进来吃水不忘挖井人&#xff1a; 小林 coding ① 初始序列号 ISN 是如何随机产生的 ISN: 初始化序列号 Initial Sequence Number 接收方和…

在Vue.js中设置方法时访问$vuetify实例

在Vue.js中访问 $vuetify实例通常意味着你正在使用Vuetify框架,它是一个流行的Vue.js的UI框架。要在Vue组件的方法中访问 $vuetify实例,通常是在组件的实例方法中通过 this关键字来实现。 例如,你可能会在Vue组件中…

纷享销客CRM任务系统:破解快消品终端动销管理难题

品牌商自有销售人员做动销,成本越来越高,雇不起那么多人,转而与经销商合作,但如何让他们的销售更主动、更多地卖自己的产品呢? 一线人员到底有没有按时拜访?陈列合不合格?促销有没有执行到位?看不见、摸不着、…

第一周博客作业-介绍自己

自我介绍: 大家好,我叫苏紫先,是2023级数据科学与大数据技术0102班的一名学生,很高兴进入这个大家庭并在此记录我接下来的学习内容,如今进入大学已经3年了,我们上了很多专业的科目虽然说成绩不错,但是真实掌握的…

完整教程:zookeeper+kafka

完整教程:zookeeper+kafka2025-09-26 09:22 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; …