前端开发那些事儿

elementUI表单校验高级用法

2020-09-13  本文已影响0人  曲昶光

elementUI的表单校验相信大家都有了解,下面这篇文章我将从表单验证的基本用法逐渐过渡到表单验证的高级用法。

1.基本用法

要进行表单校验需要通过rules 属性传入约定的验证规则,并且需要在在<el-from-item>容器上绑定prop 属性,设置为需校验的字段名即可

<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 label="活动区域" prop="region">
    <el-select v-model="ruleForm.region" placeholder="请选择活动区域">
      <el-option label="区域一" value="shanghai"></el-option>
      <el-option label="区域二" value="beijing"></el-option>
    </el-select>
  </el-form-item>
<el-form-item>
    <el-button type="primary" @click="submitForm('ruleForm')">立即创建</el-button>
    <el-button @click="resetForm('ruleForm')">重置</el-button>
  </el-form-item>
</el-form>

在data中定义验证规则

 rules: {
          name: [
            { required: true, message: '请输入活动名称', trigger: 'blur' },
            { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
          ],
          region: [
            { required: true, message: '请选择活动区域', trigger: 'change' }
          ]
}

相信表单验证的基本用法,只要是熟读官方文档就能够熟练应用,下面简单讲一下表单的自定义校验。

2.自定义校验

<el-form :model="ruleForm" status-icon :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
  <el-form-item label="密码" prop="pass">
    <el-input type="password" v-model="ruleForm.pass" autocomplete="off"></el-input>
  </el-form-item>
  <el-form-item label="确认密码" prop="checkPass">
    <el-input type="password" v-model="ruleForm.checkPass" autocomplete="off"></el-input>
  </el-form-item>
  <el-form-item label="年龄" prop="age">
    <el-input v-model.number="ruleForm.age"></el-input>
  </el-form-item>
  <el-form-item>
    <el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>
    <el-button @click="resetForm('ruleForm')">重置</el-button>
  </el-form-item>
</el-form>

自定义校验主要是在data中自己定义一些校验规则比如判断是否是字符串,数值,还可以验证一些正则表达式。

<script>
  export default {
    data() {
//重点再下方
      var checkAge = (rule, value, callback) => {
        if (!value) {
          return callback(new Error('年龄不能为空'));
        }
        setTimeout(() => {
          if (!Number.isInteger(value)) {
            callback(new Error('请输入数字值'));
          } else {
            if (value < 18) {
              callback(new Error('必须年满18岁'));
            } else {
              callback();
            }
          }
        }, 1000);
      };
      var validatePass = (rule, value, callback) => {
        if (value === '') {
          callback(new Error('请输入密码'));
        } else {
          if (this.ruleForm.checkPass !== '') {
            this.$refs.ruleForm.validateField('checkPass');
          }
          callback();
        }
      };
      var validatePass2 = (rule, value, callback) => {
        if (value === '') {
          callback(new Error('请再次输入密码'));
        } else if (value !== this.ruleForm.pass) {
          callback(new Error('两次输入密码不一致!'));
        } else {
          callback();
        }
      };
      return {
        ruleForm: {
          pass: '',
          checkPass: '',
          age: ''
        },
        rules: {
          pass: [
            { validator: validatePass, trigger: 'blur' }
//重点在这里
          ],
          checkPass: [
            { validator: validatePass2, trigger: 'blur' }
          ],
          age: [
            { validator: checkAge, trigger: 'blur' }
          ]
        }
      };
    },
    methods: {
      submitForm(formName) {
        this.$refs[formName].validate((valid) => {
          if (valid) {
            alert('submit!');
          } else {
            console.log('error submit!!');
            return false;
          }
        });
      },
      resetForm(formName) {
        this.$refs[formName].resetFields();
      }
    }
  }
</script>

3.高级用法

动态生成验证规则

//获取后台数据中的正则表达式动态生成验证规则
            let names = item.examinerFieldName
            this.rules[names] = []
            item.regularList.forEach(reg => {
              // let myReg = eval(reg.fieldRegularContent)
              let myReg = new RegExp(reg.fieldRegularContent)
              
              let validatorData = (rule, value, callback) => {
                if (value == '' || value == undefined || value == null) {
                  callback();
                } else {
                  if (!myReg.test(value)) {
                    callback(new Error(reg.fieldRegularTips));
                  } else {
                    callback();
                  }
                }
              }
              let newRule

              if (_self.rules[names]) {
                newRule = [..._self.rules[names], { required: true, validator: validatorData, trigger: item.examinerFieldType == 1 ? 'blur' : 'change' }]
              } else {
                newRule = [_self.rules[names], { required: true, validator: validatorData, trigger: item.examinerFieldType == 1 ? 'blur' : 'change' }]
              }
              let obj = {}
              obj[names] = newRule
             
              _self.rules = Object.assign({}, _self.rules, obj)
            })
          

上段代码中的_self=this。

上一篇 下一篇

猜你喜欢

热点阅读