<el-form-item
v-if="editForm.data.category.properties"
:key="item.id"
:label="item.property_name"
:rules="item.required ?
[{ required: true, message: '必填', trigger: ['blur','change'] }] : []
"
label-width="180px"
>
<template v-if="item.type == 'select' ">
<el-row>
<el-col :span="12">
<el-select
v-model="item.value"
filterable
remote
clearable
>
<el-option
v-for="subitem in item.options"
:key="subitem.id"
:label="subitem.name"
:value="subitem.value"
/>
</el-select>
</el-col>
</el-row>
</template>
<template v-if="item.type == 'multi_select' ">
<el-col :span="11">
<el-select
v-model="item.value"
filterable
multiple
remote
reserve-keyword
clearable
>
<el-option
v-for="subitem in item.options"
:key="subitem.id"
:label="subitem.name"
:value="subitem.value"
/>
</el-select>
</el-col>
</template>
<template v-if="item.type == 'text' ">
<el-col :span="11">
<el-input v-model="item.value" />
</el-col>
</template>
</el-form-item>
</el-row>
请问一下各位同志请问像这种情况要怎么进行表单校验,需要根据后台获取到的接口数据进行特定字段的表单校验,不同的数据校验的内容不同,我现在遇到的问题是我试过这样写
<el-form-item
v-if="editForm.data.category.properties"
:key="item.id"
:prop="`properties.` + index + `.value` "
:label="item.property_name"
:rules="item.required ?
[{ required: true, message: '必填', trigger: ['blur','change'] }] : []
"
label-width="180px"
/ >
但是没有用,还是无法校验字段,比如说根据我的校验规则,按理来说应该是失去焦点或改变值就会触发校验的,但是校验并没有触发,感谢
要是数组对象这种就给按照这种去对应
<el-col :span="12" v-for="(item,index) in form.productParameters">
<el-form :model="item" ref="formList" label-width="180px">
<el-form-item :label="item.name" prop="paramValue"
:rules="item.isKey=='true' ? [ { required: true, message: item.name+'不能为空', trigger: ['blur','change'] }] :[]">
<el-input v-model="item.paramValue" style="width:100%">
</el-input>
</el-form-item>
</el-form>
</el-col>
```
数据结构例子:
针对这个问题,可以在表单元素上添加自定义校验规则(validate自定义校验规则),在规则函数中根据后台返回的数据进行特定字段的校验。具体步骤如下:
<el-form-item label="用户名" prop="username">
<el-input v-model="username" placeholder="请输入用户名"></el-input>
</el-form-item>
export default {
data() {
return {
username: '',
};
},
methods: {
validateUsername(rule, value, callback) {
//根据后台返回的数据进行校验
let errorMsg = '';
//假设后台返回的数据中,username字段不能为空
if (!value) {
errorMsg = '用户名不能为空';
}
if (errorMsg) {
callback(new Error(errorMsg));
} else {
callback();
}
},
//提交表单,调用el-form的validate方法
submitForm() {
this.$refs["form"].validate((valid) => {
if (valid) {
console.log("表单校验通过");
//表单校验通过,可以提交表单数据
} else {
console.log("表单校验不通过");
return false;
}
});
},
},
};
在规则函数validateUsername中根据后台返回的数据进行特定字段的校验,例如判断“用户名”字段是否为空。如果为空,则提示错误信息;否则返回true。
在el-form中调用validate方法进行表单校验,如果校验通过,则可以提交表单数据。如果校验不通过,则提示错误信息。