鸿蒙自定义弹出框响应式更新数据
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}\) 内的所有元素向…
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进程同步 问题在多道批处理系统中,多个进程是并发执行的,而并发执行的进程具有异步性,也就是说,各个进程以各自独立的、不可预知的速度向前推进。这样会带来什么问题呢?如果有 AB…
北京建网站需要多少钱动漫网站html
一、 python语法
1. 请说一下你对迭代器和生成器的区别?
2. 什么是线程安全?
3. 你所遵循的代码规范是什么?请举例说明其要求?
4. Python中怎么简单的实现列表去重?
5. python 中 yield 的用法…
深圳seo网站优化公司360公司官网首页
Unity3D 小案例 像素贪吃蛇 第二期 蛇的觅食
像素贪吃蛇
食物生成
在场景中创建一个 2D 正方形,调整颜色,添加 Tag 并修改为 Food。 然后拖拽到 Assets 文件夹中变成预制体。 创建食物管理器 FoodManager.cs,添加单例,可以设置…
网站建设软硬件要求江西省建设招标网站
一 ISN序列号探究
本文主要探究三次握手建立TCP连接的细节备注: 某些问题探究的比较深入,当前用不到,暂时通过链接引入进来吃水不忘挖井人: 小林 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; …