el-form表单校验需要注意的地方,很容易出现问题而发现不了
el-form 的model属性和ref属性的值不要求一定相同,它们可以不一样,但是model属性的值一定是一个对象,且el-form-item中的el-input的v-model的值需要是el-form 的model值对象的直接一级属性,如果不是直接一级属性,那么校验函数validate(valid=>{})就会一直走false,导致校验永远无法通过。
比如下面代码:el-form的model值为data中的一个名为activityForm的对象,el-input的v-model值为activityForm对象里面的直接属性的值,如果activityForm对象有多层级属性嵌套,也一定要处理为v-model值是model对象值的直接属性才能做表单校验。el-form的ref值是字符串ruleForm。
<el-form :model="activityForm" :rules="rules" ref="ruleForm" label-width="100px">
<el-form-item label="活动名称" prop="name">
<el-input v-model="activityForm.name"></el-input>
</el-form-item>
<el-form-item label="活动时间" required>
<el-col :span="11">
<el-form-item prop="date1">
<el-date-picker type="date" placeholder="选择日期" v-model="activityForm.date1" style="width: 100%;"></el-date-picker>
</el-form-item>
</el-col>
<el-col class="line" :span="2">-</el-col>
<el-col :span="11">
<el-form-item prop="date2">
<el-time-picker placeholder="选择时间" v-model="activityForm.date2" style="width: 100%;"></el-time-picker>
</el-form-item>
</el-col>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('ruleForm')">立即创建</el-button>
<el-button @click="resetForm('ruleForm')">重置</el-button>
</el-form-item>
</el-form>
<script>
export default {
data() {
return {
activityForm: {
name: '',
date1: '',
date2: ''
},
rules: {
name: [
{ required: true, message: '请输入活动名称', trigger: 'blur' },
{ min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
],
date1: [
{ type: 'date', required: true, message: '请选择日期', trigger: 'change' }
],
date2: [
{ type: 'date', required: true, message: '请选择时间', trigger: 'change' }
]
}
};
},
methods: {
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
alert('submit!');
} else {
console.log('error submit!!');
return false;
}
});
},
resetForm(formName) {
this.$refs[formName].resetFields();
}
}
}
</script>