vue开发(八)关于element表单校验的一些总结

  1. form表单校验的基础总结:
    <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px"></el-form>上边需要加***rules***字段
    <el-form-item label="活动名称" prop="name"> <el-input v-model="ruleForm.name"></el-input> </el-form-item>item中prop字段需要和rules对象中的规则名一致,也要和v-model中绑定的字段名一致,如果绑定名不一致会出现就算输入了数据也判定为空

  2. 不同表单元素的校验
    ①input
    输入的数据校验:

手机号:
<el-input v-model="ruleForm.whitePhone" oninput="value=value.replace(/[^0-9]/g,'')"></el-input>

rules:{
	whitePhone: [
		{ type:"string", required:true, message:"必填字段", trigger:"blur" },
        { min: 11, max: 11, message: '手机号码长度为11位', trigger:"blur"}
    ]
}
数字字母:
oninput="value=value.replace(/[^A-Za-z0-9]/g,'')"
禁止输入表情😀📕🆒:
watch: {
  'ruleForm.name': {
     handler (val, oldVal) {
       var reg = "[^\\u0020-\\u007E\\u00A0-\\u00BE\\u2E80-\\uA4CF\\uF900-\\uFAFF\\uFE30-\\uFE4F\\uFF00-\\uFFEF\\u0080-\\u009F\\u2000-\\u201f\\r\\n]"
       if (val.match(reg)) {
         this.formData.name = oldVal
       }
     }
   }
 },

② 时间选择器

<el-date-picker
   align="right"
   v-model="ruleForm.learnedTime"
   type="datetime"
   clearable
   format="yyyy-MM-dd HH:mm:ss"
   value-format="yyyy-MM-dd HH:mm:ss"
   :picker-options="pickerOptions"
   placeholder="选择日期时间">
 </el-date-picker>
 
 data () {
 	var validateTime = (rule, value, callback) => {
      if (!value && new Date(value).getTime() > Date.now()) {
        callback(new Error('选择时间不得大于当前时间'))
      } else {
        callback();
      }
    }
 	return {
		rules:{
			learnedTime: [
				{ type: 'string', required: true, message: '请选择日期', trigger: 'change' },
		        { validator: validateTime, trigger: 'change'}
		    ]
		}
	}
}
	注意:1.如果日期选择器上设置了value-format="yyyy-MM-dd HH:mm:ss"即传入时间的格式,type需要由原来的date格式改成string格式,否则会报错
		2.element中对于type="datetime"其实给出了限制选择日期的方案,但只能限制日期,不能限制时间,所以我自己加了校验

③图片上传数据校验

<el-form-item label="图片预览" prop="bannerImg" class="upload-item">
	<el-upload
		class="avatar-uploader"
		action="#"
		:on-change="changeBannerImgUpload"
		:auto-upload="false"
		:show-file-list="false">
		<img v-if="form.bannerImg" :src="form.bannerImg" class="avatar">
		<i v-else class="el-icon-plus avatar-uploader-icon"></i>
		<div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且尺寸为690*140!</div>
	</el-upload>
</el-form-item>
data () {
	return {
		rules: {
        	bannerImg: { required: true, message: '请上传轮播图', trigger: 'change' }
		},
		form: {
		 'bannerImg': ''
		}
	}
}
changeBannerImgUpload (file) {
      this.form.bannerImg = URL.createObjectURL(file.raw)
      const isImg = file.type === 'image/jpeg' || 'image/png'
      if (!isImg) {
	        this.$message.error('上传头像图片只能是 jpg/png 格式!')
      }
      this.judgeImgSize(file, () => {
	        this.$message.error('上传轮播图片尺寸为690*140')
	        this.fileList = []
      })
},
// 判断图片尺寸
judgeImgSize (file, callBack) {
	let reader = new FileReader()
	reader.onload = (e) => {
		let data = e.target.result
		let img = new Image()
		img.onload = () => {
			let width = img.width
			let height = img.height
			if (width !== 690 || height !== 140) {
				  callBack()
			}
		}
		img.src = data
	}
	reader.readAsDataURL(file.raw)
}
  1. 校验方法的总结:
    ①数据清空
this..$refs.form.resetFields()

②单独校验某一项和全部校验

单独校验某一项:
this.$refs.form.validateField('bannerImg')
全部校验:
this.$refs.form.validate((valid) => {
	if (valid) {
		alert('submit!')
	} else {
		console.log('error submit!!')
		return false
	}
})

③动态修改校验提示信息,比如部分数据由后端校验返回错误提示信息

this.$refs['form'].fields[0].validateMessage = '人员信息有误!'
this.$refs['form'].fields[0].validateState = 'error'  //  显示提示信息
this.$refs['form'].fields[0].validateState = ''  // 隐藏提示信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值