验证失败:
在使用 Element-UI 时,按照官方实例编写表单验证规则,却总是验证失败。当点击提交时会发现,明明表单已经填写了,页面还是提示未填写;明明填写正确了,页面还是提示不正确。如下图:
使用方法:
在 ElementUI 中,可以通过在 标签中将 rules
属性绑定 Vue 中自定义的规则数组,然后在 标签中使用 prop="xxx"
调用特定规则,实现表单验证的功能,代码如下:
<!-- 通过 :rules="diyRules" 绑定自定义的规则数组 -->
<el-form :model="form" :rules="diyRules" ref="ruleForm" label-width="100px">
<!-- 通过 prop="name" 调用规则数组里的 nameRule 规则 -->
<el-form-item label="活动名称" prop="nameRule">
<el-input v-model="ruleForm.name"></el-input>
</el-form-item>
<el-form-item label="活动形式" prop="descRule">
<el-input type="textarea" v-model="ruleForm.desc"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>
</el-form-item>
</el-form>
<script>
export default {
data() {
return {
form: {
name: '',
desc: ''
},
diyRules: { //自定义规则:
nameRule: [
{ required: true, message: '请输入活动名称', trigger: 'blur' },
{ min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
],
descRule: [
{ required: true, message: '请填写活动形式', trigger: 'blur' }
]
}
};
},
methods: {
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
// 向后台发送数据
} else {
console.log('表单验证失败!');
return false;
}
});
}
}
}
</script>
上面的列子中具体的操作大致如下:
-
在 Vue 里面 return 了一个名叫 diyRules 的规则数组,数组里定义了 nameRule 和 descRule 两个规则。
-
在 标签中使用
:rules="diyRules"
绑定该数组 -
在 标签中使用
prop="nameRule"
调用数组里的 nameRule 规则
解决方法:
原来,prop 对应的不单单是 rules 规则里面的验证项,同时应该对应着我们 下的 model 绑定的值。prop绑定的类要与 的 model 绑定的值相对应。
而上列中 model 绑定的是 form 对象,form 里面有 name 和 desc 两个数据,所以自定义的规则的名字是不能随便取得,而要和 form 里的一样!
修改方法:将 diyRules 里的两个: nameRule、descRule 规则改名为 name、desc,保持和 form 里的值一样。
修改后的代码如下:
<!-- 通过 :rules="diyRules" 绑定自定义的规则数组 -->
<el-form :model="form" :rules="diyRules" ref="ruleForm" label-width="100px">
<!-- 通过 prop="name" 调用规则数组里的 name 规则 -->
<el-form-item label="活动名称" prop="name">
<el-input v-model="ruleForm.name"></el-input>
</el-form-item>
<el-form-item label="活动形式" prop="desc">
<el-input type="textarea" v-model="ruleForm.desc"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>
</el-form-item>
</el-form>
<script>
export default {
data() {
return {
form: {
name: '',
desc: ''
},
diyRules: { //自定义规则:
name: [
{ required: true, message: '请输入活动名称', trigger: 'blur' },
{ min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
],
desc: [
{ required: true, message: '请填写活动形式', trigger: 'blur' }
]
}
};
},
methods: {
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
// 向后台发送数据
} else {
console.log('表单验证失败!');
return false;
}
});
}
}
}
</script>
验证成功: