elementUI表单嵌套表格并对每行进行校验
elementUI表单嵌套表格并对每行进行校验
elementUI表单嵌套表格并进行校验。
目录
- 效果展示
- 代码链接
- 关键代码
- 完整代码
效果展示
先看看这是不是需要的效果^_^

如图,ElementUI 表单里嵌套了表格,表格内每行能进行【保存】【新增】【编辑】【删除】【重置】等操作,同时可以对每行的某些字段进行校验(而不是整个表单校验!),这种需求很常见,所以记录下来。
代码链接
gitee地址
关键代码
- 表格数据
// 数据格式必须是【对象嵌套数组】,【form】绑定表单,【list】绑定表格
form: {
// 表格数据
list: [
{ id: 1, name: '小叶', age: '12', phone: '123456', show: true },
{ id: 2, name: '小李', age: '23', phone: '123457', show: true },
{ id: 3, name: '小林', age: '12', phone: '123458', show: true }
]
},
- 组件嵌套
添加字段校验的时候,格式必须写成这样的
:prop="'list.' + scope.$index + '.name'"这是
elementui规定的格式,渲染后的结果为list.1.name每个字段要动态绑定表单的
rules属性如果不是以上的格式,会出错!!!
// 表单必须嵌套在表格的外面,表单必须绑定【rules】【ref】属性
// 每个字段动态的绑定表单的【prop】【rules】属性
-
校验方法
- 表单的字段对象存在于
this.$refs['form'].fields中,并且字段对象具有prop【datas.1.name】属性和validateField方法【验证datas.1.name能否通过校验】 - 但是
validateField方法需要手动创建来验证能否通过校验 - 必须创建,否则会出错!!!
// 表单校验方法 // 【form】是需要校验的表单,就是表单中【ref】绑定的字段 // 【index】是需要传入的行数,字段【scope.$index】 validateField(form, index) { let result = true; for (let item of this.$refs[form].fields) { if(item.prop.split(".")[1] == index){ this.$refs[form].validateField(item.prop, err => { if(err !="") { result = false; } }); } if(!result) break; } return result; } - 表单的字段对象存在于
-
重置方法
// 对【需要校验】的表单字段进行重置 // 参数同校验方法,如果是全部重置 reset(form, index) { this.$refs[form].fields.forEach(item => { if(item.prop.split(".")[1] == index){ item.resetField(); } }) } // 如果需要全部重置可以直接质控表单中字段 // 【row】是每行传入的数据 resetRow(row) { row.name = ""; row.age = ""; row.phone = ""; }
完整代码
因为用的是在线链接,网络不稳定时页面不一定能加载出来,使用时可以更换成本地的!
vue表单嵌套表格逐行验证
vue表单嵌套表格逐行验证