浅析Element中form表单配置rules验证流程
在el-form中配置了rules表单验证规则,那么在提交时通过调用el-form组件的 validate方法,即可完成对所有表单项el-form-item的填写值的校验。
看了Element中el-form、el-form-item源码,整理了下流程,让自己思路更清晰。
- 通过调用
el-form的validate方法发起表单校验
-
el-form中用一个数组fields收集每个el-form-item表单项组件- 事件触发方式收集,机制详见我另一篇文章:Element中的自定义事件的监听和触发
-
遍历
fields,调用每个el-form-item组件中定义的validate方法- 校验的工作就是在
validate中完成的
- 用到了一个第三方校验库:
async-validator
- 校验的工作就是在
- 在
el-form-item的validate方法验证后,调用传入的callback,将校验结果返回给el-form的validate方法
-
最终,整个验证流程结束。总结一下就是:
- 表单字段校验工作由每个表单项自己负责
- 父组件
el-form只负责从子组件el-form-item中拿到校验结果并返回给我们。
流程图
画了个流程图方便理解。(放大看,更清晰哦~)
实测代码
<template>
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
<el-form-item label="活动名称" prop="name">
<el-input v-model="ruleForm.name"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('ruleForm')">立即创建</el-button>
</el-form-item>
</el-form>
</template>
<script>
export default {
data() {
return {
ruleForm: {
name: ''
},
rules: {
name: [
{ required: true, message: '请输入活动名称', trigger: 'blur' },
{ min: 3, message: '长度 >=3', trigger: 'blur' },
{ max: 5, message: '长度<=5', trigger: 'blur' }
],
}
}
},
methods: {
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
alert('submit!');
} else {
console.log('error submit!!');
return false;
}
});
},
</script>
总结:
最终,整个验证流程结束。总结一下就是:
- 表单字段校验工作由每个表单项自己负责
- 父组件
el-form只负责从子组件el-form-item中拿到校验结果并返回给我们。