美文网首页前端开发那些事儿
elementUI表单校验高级用法

elementUI表单校验高级用法

作者: 曲昶光 | 来源:发表于2020-09-13 23:15 被阅读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。

相关文章

  • elementUI表单校验高级用法

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

  • elementUI表单校验

    感谢度娘 element-ui中表单验证的三种方式 第一种常用方式:表单上加rules{object} 这种方式需...

  • elementui表单校验

    进行表单校验需要通过rules 属性传入约定的验证规则,并且需要在在容器上绑定prop...

  • elementui表单自定义校验及嵌套验证

    自定义校验规则额外参数 多个输入框校验逻辑一致 ElementUI表单校验prop的嵌套写法页面中的表单经常会有校...

  • elementUI踩坑

    ElementUI 表单校验没反应的问题 因为同一页面下写了多个表单,我需要对所有表单都进行校验无误后再向后台发起...

  • elementUI form表单校验报错

    elementUI form表单动态增加表单项使用v-for进行表单校验时报错,报错信息如下: 主要原因是el-f...

  • elementUI Form表单校验 不通过问题

    遇到一个问题,适用elementUI的表单校验时,select校验总是不用过代码如下: 经过多方排查,终于找到问题...

  • elementui 动态表单校验

    https://segmentfault.com/a/1190000020410128?utm_source=ta...

  • vue elementUI 表单校验

    参考:https://www.cnblogs.com/beileixinqing/p/10969828.html[...

  • Element、iview 表单校验总结

    本文分享主要内容:基本用法、校验方式、部分校验(关联交验)、新增校验、 动态切换校验、校验/重置Form表单、日期...

网友评论

    本文标题:elementUI表单校验高级用法

    本文链接:https://www.haomeiwen.com/subject/jszoektx.html