Form 组件提供了表单验证的功能,只需要通过 rules 属性传入约定的验证规则,并将 Form-Item 的 prop 属性设置为需校验的字段名即可。
以一般的form表单为例
:model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px"
class="demo-ruleForm">
"活动名称" prop="name">
"ruleForm.name"></el-input>
</el-form-item>
一般在vue中这样来写,就可以对表单进行验证。
data(){
return {
ruleForm: { name: '' },
rules: {
name: [
{ required: true, message: '请输入活动名称', trigger: 'blur' },
{ min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
]
}
}
},
如果有一些复杂的验证规则,也可以选择自定义验证, validator
data() {
const userValidator = (rule, value, callback) => {
if (value.length > 3) {
callback()
} else {
callback(new Error('用户名长度必须大于3'))
}
}
return {}
}
rules: {
user: [
{ validator: userValidator, trigger: 'change' }
]
}
嵌套的表单,一般业务场景是,有一些表单项需要按照条件显示或者隐藏,data里面的model数据可能会是对象里面套对象的,el-form也同样支持嵌套的验证,写法一般如下:
:model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px"
class="demo-ruleForm">
"活动名称">
"ruleForm.name"></el-input>
"info.name">
"ruleForm.info.name"></el-input>
</el-form-item>
</el-form-item>
data(){
return {
ruleForm: {
info: {
name: ''
}
},
}
}
rules里面同样也可以这样写
rules: {
info: {
name: [{ required: true, message: '请选择', trigger: 'change' }],
}
}
"email" label="邮箱"
:rules="[ { required: true, message: '请输入邮箱地址', trigger: 'blur' }, { type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change'] } ]" >
"ValidateForm.email"></el-input>
</el-form-item>
根据条件判断是否需要某种验证规则时,一个简单的使用场景就是,通过不同的type去显示不同的错误信息。
const message =
this.type === 'addFirst'
? '请输入一级名称'
: this.type === 'addChild'
? '请输入二级名称'
: this.type === 'addThree' && this.editChannelItem
? '请选择三级名称'
: '请输入三级名称';
const validatorHandle = (rule, value, callback) => {
if (value) {
callback();
} else {
callback(new Error(message));
}
};
const newRule = [...this.formInfoRules.name, { validator: validatorHandle, trigger: 'blur' }];
this.formInfoRules = Object.assign({}, this.formInfoRules, { name: newRule });
这样使用:
:error="validateFormState.error"
:validate-status="validateFormState.state"
>
</el-form-item>
validateFormState = {
periodSendDateError: '',
periodSendDateStatus: 'success',
};
在验证成功或者失败的时候去手动控制error和validate-status的值即可。