需求:有个表单信息是v-for渲染的,例如下图,通过循环遍历实现新增和删除模块,按照平时的写法实现校验,是不能实现我们想要的效果,根据这个需求,我找到了一个解决方法
1.HTML
<el-form ref="form" :model="form" :rules="rules" label-width="110px" >
<div v-for="(item,index) in this.form.trucksList">
<div class="num">{{index+1}}.</div>
<div class="flex">
<div class="info">
<el-form-item label="服务商" :prop="'trucksList.' + index+'.providerType'"
:rules="rules.providerType">
<el-select v-model="item.providerType" placeholder="请选择">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.label">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="卡车公司" :prop="'trucksList.' + index+'.truckCompany'"
:rules="rules.truckCompany">
<el-input
v-model="item.truckCompany"
placeholder="请输入卡车公司"
/>
</el-form-item>
<el-form-item label="预估运输时间" :prop="'trucksList.' +
index+'.transportDay'" :rules="rules.transportDay">
<el-input
v-model="item.transportDay "
placeholder="请输入预估运输时间"
/>
</el-form-item>
<el-form-item label="总价" :prop="'trucksList.' + index+'.priceTotal'"
:rules="rules.priceTotal">
<el-input
v-model="item.priceTotal "
placeholder="请输入总价"
/>
</el-form-item>
</div>
</div>
</div>
</el-form>
2.JS
data(){
return{
// 报价表单参数
form: {
trucksList:[
{
providerType:'',//服务商
truckCompany:'',//卡车公司
transportDay:'',//预估运输时间
priceTotal:'',//总价
orderNo:" ",//平台订单号
}
],
},
// 表单校验
rules:{
providerType:[
{ required: true, message: "请选择服务商", trigger: "blur" }
],
truckCompany:[
{ required: true, message: "请输入卡车公司", trigger: "blur" }
],
transportDay:[
{ required: true, message: "请输入预估运输时间", trigger: "blur" }
],
priceTotal:[
{ required: true, message: "请输入总价", trigger: "blur" }
],
},
}
},
注:
1.循环的数据中,每个el-form-item都写rules、prop
2.rules为data中rules对象对应属性,如'rules.providerType';
3.prop的第一部分为data中该组遍历数据对应的数组名,此例中为form中的'trucksList';第二部分为遍历的key值变量;第三部分为form中的'trucksList'中该输入框对应的属性名;
只有以上几点写对,就可以实现循环数据的表单校验啦