按例子:
v-model="dataArr.children[0].paymentAccount" 绑的值是接口返回的下拉数据
这个时候如果按照一般的逻辑写验证规则会出现验证报错后输入正确的依旧无法隐藏报错的bug
改进:
rules: {
'children[0].paymentAccount': [{ required: true, message: '请选择付款账户', trigger: 'blur' }],
}
这样写就可以了 trigger建议写 blur 为了保证不在页面加载赋值的时候启动验证 导致一进入页面就验证报错
mounted() {
this.$refs['ruleForm'].clearValidate();
},
可以在mounted里先清除一下验证报错
附完整表单代码
<el-form
:model="dataArr"
:rules="rules"
ref="ruleForm"
:validate-on-rule-change="false"
style="margin-top:20px"
label-width="100px"
class="demo-ruleForm"
>
<div>
<el-form-item
label="付款账户"
class="paymentVal"
prop="children[0].paymentAccount"
style="width:50%;"
>
<el-select
v-model="dataArr.children[0].paymentAccount"
placeholder="请选择付款账户"
@change="changeItemAccount"
>
<el-option v-for="(v,i) in account" :key="i" :label="v.channelName" :value="v.id"></el-option>
</el-select>
</el-form-item>
</div>
<div class="btnClass">
<el-button @click="resetForm()">取消</el-button>
<el-button type="primary" @click="submitForm('ruleForm')">续费</el-button>
</div>
</el-form>
data(){
dataArr: {
children: [
{
paymentAccount: '', //
,
},
],
},}
js:
rules: {
'children[0].paymentAccount': [{ required: true, message: '请选择付款账户', trigger: 'blur' }],
},