一、表单检验
在开发Vue项目过程中,应用element-ui做表单验证遇到this.$refs[formName].validate()提示validate()未定义的问题。
出现以上问题的原因是由于要验证的DOM,还没有加载出来。
首先打印一下this.$refs[formName],检查是否拿到了正确的需要验证的form(有时候获取到数组,需要按下标取值)。
其次在拿到了正确的form后,检查该form上添加的表单验证是否正确,需要注意的点有:
-
使用此方法前检查
prop一定必须要写在<el-form-item>标签上面,写在里面的input上或者其他任何地方都不行(el-form-itemprop属性绑定); -
el-formrules,model属性绑定,ref标识;
针对问题一的解决方法如下:
this.$nextTick(() =>{
})
对于form表单校验,还应注意以下问题:
注意prop对应的不单单是rules规则里面的验证项,同时对应着form-item下v-model绑定的值。prop绑定的类要与el-form-item下v-model的值相对应。否则就算校验元素输入字符,也会提示“请输入”之类的提示语,造成校验不友好问题。
二、清除表单校验
// 清除表单校验的提示
if (this.$refs['XXX']) {
// 延时执行
this.$nextTick(function () {
this.$refs['XXX'].clearValidate();
})
};
三、callback()
vue自定义表单校验,不管检验是否通过一定要加 callback();
validateDatasourceNm(rule, value, callback) {
let reg = /^[+]{0,1}(\d+)$|^[+]{0,1}(\d+\.\d+)$/; //只允许输入正数
if (value === '') {
callback(); //这句话没有的话 不知名的问题产生。
} else {
if (!reg.test(value)) {
callback(new Error(this.ruleNames[rule.fullField]));
}
callback();
}
}