formatter的用法,深拷贝, Object.assign 方法实战。

  1. :formatter的用法 :formatter 接受一个函数作为参数,这个函数有三个参数:row,column 和 cellValue。row 是当前行的数据,column 是当前列的数据,cellValue 是当前单元格的值。
javascript 复制代码
   <el-table-column prop="SYSC" label="试用时长(月)" 
                           :formatter="row => row.JZORSY === '兼职' ? '' : row.SYSC">
                          </el-table-column>

                          <el-table-column prop="JZORSY" label="兼职或试用">
                          </el-table-column>

2.在表格所在行点击编辑,打开弹窗。修改内容,没有点击确定的时候,表格的数据会随着编辑的更新而更新,这是由于数据没有序列化,使用JOSN进行一次序列号。这样row与this.familyPerson.familyPersonForm指向的就不在是一个地址,但是导致的问题则是编辑后点击确定无法更新表格数据。

javascript 复制代码
   let _familyPersonForm = JSON.stringify(row)
      this.familyPerson.familyPersonForm = JSON.parse(_familyPersonForm);

解决方法:

javascript 复制代码
   editFamilyPerson(row, column, event) {
      this.jtMoreIndex = 1;
      this.editData = JSON.parse(JSON.stringify(row));
      this.familyPerson.editId = row.id;
      this.familyPerson.familyPersonForm= this.editData 
      this.familyPerson.familyPersonDialogVisible = true;
    },

    // 编辑完后
    onEditComplete() {
      let row = this.familyPerson.list.find(item => item.id === this.familyPerson.editId);
      Object.assign(row, this.editData);
      this.familyPerson.familyPersonDialogVisible = false;
    },

创建了一个 editData 对象,这是通过深拷贝 row 对象得到的。这样做的目的是为了避免直接修改 row 对象,因为 row 对象是直接从父组件传递过来的,直接修改它可能会导致一些不可预见的问题。

然后,你将 editData 对象赋值给 familyPerson.familyPersonForm,这样就可以在表单中显示和编辑这些数据了。

在 onEditComplete 方法中,使用 Object.assign方法将 editData 对象的内容复制到了原始数据中。这样做的目的是为了更新原始数据,而不是创建一个新的对象。这是因为 Object.assign 方法会修改目标对象(即 row 对象),而不是创建一个新的对象。

相关推荐
夜焱辰27 分钟前
浏览器端 Agent 的文件版本管理:不用 Git,基于 OPFS + SQLite 自己造了一个
前端·人工智能
梦想的颜色28 分钟前
TypeScript 完全指南(下):从类型体操到生产级配置
前端·javascript·typescript
Hi~晴天大圣2 小时前
npm使用介绍
前端·npm·node.js
888CC++3 小时前
如何在 C 语言中进行程序调试?
前端·javascript·算法
喵个咪3 小时前
基于 Taro 的 Headless CMS 多端前端架构:技术解析与二次开发导引
前端·react.js·taro
狂炫冰美式3 小时前
你还在古法PPT吗,试试HTML呢?免费编辑导出工具给 xdm 放这了
前端·后端·github
万少4 小时前
未来组织的分水岭不是员工数量,而是人才密度
前端·后端·面试
任磊abc4 小时前
nextjs16配置eslint+prettier
前端·eslint·nextjs·prettier
x***r1514 小时前
Another-Redis-Desktop-Manager.1.3.7安装步骤详解(附Redis可视化连接与Key管理教程)
前端·bootstrap·html
Captaincc4 小时前
你真的知道自己把 AI 用在了哪里吗?这是 Vibe Usage 想回答的问题
前端·vibecoding