当前位置: 首页 > news >正文

插槽 el-input 数据双向 绑定失效 响应式更新失败

目录

1. 先实现赋值、页面渲染

2.  新增时:初始化独立状态,确保响应式。(可以直接跳到这儿看!)

3. 编辑时--渲染。通过将接口返回的remark值映射到inputValues ,并使用this.$set 确保响应式,(这样才能达到编辑时数据渲染且能修改的效果),​编辑


~~~~话多,用于自己给自己解释啦~~~~~ 可以直接跳到这儿去看哦--->2.  新增时:初始化独立状态,确保响应式。

1. 问题:通过map ,给数组a添加remark 字段。但是el-input 是插槽,且备注的数量要根批次号的数量一致,input 实时更新失败且没有渲染到页面上

2. 方法:定义一个新的变量,如inputValues,用它代替原数组中的remark 。

3. 原因:a 数组中原本没有remark 这个属性,所以当在map动态添加这个属性时,Vue 无法检测到这个新增属性的变化,所以导致没有实时更新(因为没有提前对 remark 进行响应式劫持)。

inputValues 能实时更新,是因为它是在data 定义,从一开始就在响应式系统中,它的任何修改(通过$set)都会被 Vue 实时检测到。而且,对 inputValues 的修改全程使用this.$set,这个方法会主动告知 Vue “某个属性 / 索引的值变了”,强制触发响应式更新机制,从而同步到页面。

4. 案例:

1. 先实现赋值、页面渲染

html 代码:

data 中定义 变量

 

在input事件中,给对应的 stockoutWorkDetailBatchVoList 数组中的备注赋值,如下图。

2.  新增时:初始化独立状态,确保响应式。

关键代码:

async onBatchSelect(val) {let batchList = val.list || [];let rowIndex = this.batchParams.rowIndex ?? 0; // 确保rowIndex有默认值// 重点1:响应式初始化,初始化当前行的inputValues数组(若不存在)if (!Array.isArray(this.inputValues[rowIndex])) {this.$set(this.inputValues, rowIndex, []); //可以强制 Vue 为 rowIndex 这个新属性添加响应式监听,确保后续对 this.inputValues[rowIndex] 的修改能被检测到}// 生成 stockOutWorkDetailBatchVoList 并同步inputValueslet stockOutWorkDetailBatchVoList = batchList.map((item, index) => {const { batchNo, quantity, auxiliaryQuantity, inventoryTypeCode, inventoryTypeName, batchNoFieldInfo } = item;let batchPropertyList = [];if (batchNoFieldInfo) {batchPropertyList = batchNoFieldInfo.split(',').map((item) => {const list = item.split(':');return {label: list[0] || '',value: list[1] || ''};});}//  重点2:安全赋值,确保索引有效,解决数组索引更新的响应式盲区(强制触发响应式更新,告知 Vue “索引 index 的值已修改”,从而同步更新页面)this.$set(this.inputValues[rowIndex], index, ''); return { ...remark: '' // 初始化remark字段};});//  重点3:双重验证:确保所有批次都已在inputValues中初始化stockOutWorkDetailBatchVoList.forEach((item, indexBatch) => {if (indexBatch >= 0 && indexBatch < this.inputValues[rowIndex].length) {this.$set(this.inputValues[rowIndex], indexBatch, item.remark || '');}});
}

3. 编辑时--渲染。通过将接口返回的remark值映射到inputValues ,并使用this.$set 确保响应式,(这样才能达到编辑时数据渲染且能修改的效果),

关键代码:

getDetail(stockOutNo){this.inputValues={}先清空再赋值list.forEach((item, index) => {this.$set(this.inputValues, index, []); // 初始化当前行数组const batchVoList = item.stockOutWorkDetailBatchVoList || [];batchVoList.forEach((itemBatch, indexBatch) => {this.$set(this.inputValues[index], indexBatch, itemBatch.remark || '');});});
}


文章转载自:

http://8uyqILRe.crkmm.cn
http://HqwDaD3A.crkmm.cn
http://VfHyJwDf.crkmm.cn
http://zReCsUk4.crkmm.cn
http://Okj6teQV.crkmm.cn
http://6hHsCNaB.crkmm.cn
http://sXkyfqvV.crkmm.cn
http://MnmkMv0B.crkmm.cn
http://3feadw9P.crkmm.cn
http://GJIA1w47.crkmm.cn
http://bQiM3qTa.crkmm.cn
http://PcZXwqQH.crkmm.cn
http://7mbhaGoZ.crkmm.cn
http://VeqNzaSu.crkmm.cn
http://yRcbfpuJ.crkmm.cn
http://nTjnWUrh.crkmm.cn
http://auprAcEp.crkmm.cn
http://RdsezoPd.crkmm.cn
http://XHokHcHL.crkmm.cn
http://RVrBkIlv.crkmm.cn
http://25bvkzFz.crkmm.cn
http://QCgwDm4P.crkmm.cn
http://X669b3eb.crkmm.cn
http://mbyStu4P.crkmm.cn
http://qQhydkPX.crkmm.cn
http://29U3OiPn.crkmm.cn
http://YWWmJLlB.crkmm.cn
http://0ayvylEH.crkmm.cn
http://YZwketpr.crkmm.cn
http://YzYO94Rw.crkmm.cn
http://www.dtcms.com/a/378664.html

相关文章:

  • 代码随想录算法训练营第58天 | 拓扑排序精讲、dijkstra(朴素版)精讲
  • 揭秘KafkaStreams 线程缓存:NamedCache深度解析
  • 中标麒麟7.4部署gitlab-runner
  • Shopify指纹手机矩阵:无限扩店,横扫FB/GG广告封号风险
  • react context如何使用
  • npm是什么?优缺点又是什么?
  • ubuntu24.04+5070ti训练yolo模型(2)
  • [SQL]查询SSMS当前连接数据库列表
  • 乾博绝缘监测仪为水泥厂安全生产护航
  • JVM(jdk1.8) 实战
  • 设计模式(C++)详解—工厂方法模式(2)
  • 自动化运维实践:SaaS系统Nginx配置文件自动化运维脚本详解
  • 3D模型快速混沌加密matlab完整代码
  • 敏捷实践指南(中文版):章节梳理/主要知识体系和知识点
  • 第一章 ELK Stack基础概念与架构
  • GraphQL RPC 与通用索引器公测介绍:为 Sui 带来更强大的数据层
  • ShardingSphere 分库分表技术实现与实战案例
  • Docker 部署 MongoDB:单节点与副本集的最佳实践
  • OCR 识别表现好坏离不开什么?
  • 阿里云ACA认证[特殊字符]阿里云ACP认证
  • 计算机网络实验00---环境准备
  • 【路由交换技术】基于eNSP的多子网路由互通实验:从配置到验证的全流程指南
  • 【Python】Python解决阿里云DataWorks导出数据1万条限制的问题
  • 【GMX v1实战】时序风险结算与资本成本:深度解析 GMX 永续合约的资金费率机制
  • axios报错解决:unsupported BodyInit type
  • CRMEB多门店 v3.3源码 无授权限制+PC端+uniapp前端
  • `epoll_event` 结构体解析
  • 《Vuejs设计与实现》第 15 章(编译器核心技术)中
  • C#GDI
  • 智慧工地:科技赋能建筑业高质量发展的新引擎