Vue进阶(幺贰幺):ElementUI 表单校验注意事项

175 阅读1分钟

一、表单检验

在开发Vue项目过程中,应用element-ui做表单验证遇到this.$refs[formName].validate()提示validate()未定义的问题。

出现以上问题的原因是由于要验证的DOM,还没有加载出来。

首先打印一下this.$refs[formName],检查是否拿到了正确的需要验证的form有时候获取到数组,需要按下标取值)。

其次在拿到了正确的form后,检查该form上添加的表单验证是否正确,需要注意的点有:

  1. 使用此方法前检查prop一定必须要写在<el-form-item>标签上面,写在里面的input上或者其他任何地方都不行(el-form-item prop属性绑定);

  2. el-form rulesmodel属性绑定,ref标识;

针对问题一的解决方法如下:

this.$nextTick(()  =>{
 
})

对于form表单校验,还应注意以下问题:

在这里插入图片描述

注意prop对应的不单单是rules规则里面的验证项,同时对应着form-itemv-model绑定的值。prop绑定的类要与el-form-itemv-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();
	}
}

四、拓展阅读