在写表单的时候,容易碰到这种嵌套表单的数据校验,并且这种表单是动态添加的,网上大部分的做法是表单套表单,实际上只需要一个表单就可以了。
为了方便观看,这里只列举了两条数据
多级表单嵌套校验
<el-form ref="ruleFormRef" :model="ruleForm.FormTable" :rules="rules" label-width="80px" class="demo-ruleForm" label-position="left" :size="formSize" status-icon > 添加 <el-form-item label="商品编号" :prop="`goodsDetail.`+index+`.name`" :rules="[{ required: true, message: '请输入商品编号', trigger: 'blur' }]" > <el-form-item label="商品数量" :prop="`goodsDetail.`+index+`.goodsNum`" :rules="[{ required: true, message: '请输入商品数量', trigger: 'blur' }]">
数据
// 为了演示嵌套校验,这里将列表数据嵌套在对象内部 const ruleForm = reactive({ FormTable:{ name: 'fanction', // 嵌套的列表数据 goodsDetail : [ {id:null,name:null,goodsNum:null,store:null} ] } })
此处的数据里是一个对象内套了一个数组对象,正常情况下,校验是通过prop
对module
里面的数据进行校验,但此处是数组,数据在数组内部,所以用一般的prop
指定数据名是校验不了的,这里用的是
:prop=“
goodsDetail.
+index+.name
”
只需要在prop
中指定到当前数据在module
里的位置即可。此处的goodsDetail
就是v-for
中ruleForm.FormTable.goodsDetail
的最后面一位,向下寻找,goodsDetail[index].name
就是当前的数据,只不过这里改成了xxx.xxx.xxx
的链式写法。
校验规则写在el-form-item
上面:
:rules=“[{ required: true, message: ‘请输入商品编号’, trigger: ‘blur’ }]”
动态添加,只需要给数组末尾添加一个空对象即可。
// 添加按钮 const addGoodsInfo = () => { ruleForm.FormTable.goodsDetail.push({id:null,name:null,goodsNum:null,store:null})
动态删除,给当前条添加一个点击事件,找到当前条删除。
// 删除按钮 const deleteGodos = (index : number) => { console.log(index); ruleForm.FormTable.goodsDetail.splice(index,1) }
Copyright © 2023 leiyu.cn. All Rights Reserved. 磊宇云计算 版权所有 许可证编号:B1-20233142/B2-20230630 山东磊宇云计算有限公司 鲁ICP备2020045424号
磊宇云计算致力于以最 “绿色节能” 的方式,让每一位上云的客户成为全球绿色节能和降低碳排放的贡献者