缘起
刚接触vue+elementUI开发,项目开发中遇到一个问题要往一个表格中动态添加一行,其中一列要选择多个值插入,问题抽象为下图。
添加一个空行,实现方式
<el-table :data="tableData" border height="300" style="width: 100%;" > table数据绑定在tableData上,tableData是一个空的数组类型,给添加按钮添加一个addData方法,方法如下addData(){this.tableData.push({edit: true, });}
下面是关键,核心就是利用自定义模板和scope.$index和scope.row两个方法
// 拿到某一行的index----------scope.$index
// 拿到某一行的数据-----------scope.row
比如用户输入的名字,如何做到添加一个新行的时候不自动获取到上一行输入的名字,用户姓名数据为通过自定义模板绑定到username,通过scope.row对应到这一行
选择队友时传入当前行的index,添加一个currentRowIndex属性
注意使用this.$set不刷新页面强制更新table数据。data中数据,都是响应式。也就是说,如果操作data中的数据,视图会实时更新;
但在实际开发中,遇到过一个坑:若data中数据类型较为复杂,方法methods中改变对象的属性,视图也就是页面并不会改变
原因是vue监听不到数据类型特别复杂的属性。
再添加一行,与上一行无关,实现行行间数据独立
源码获取链接
clone下来看是否满足你的需求