美文网首页
el-form的各种校验姿态

el-form的各种校验姿态

作者: meng_281e | 来源:发表于2018-09-19 16:38 被阅读0次
    1.基础姿势/自定义姿势
    <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px">
      <el-form-item label="活动名称" prop="name">
        <el-input v-model="ruleForm.name"></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>
    <script>
      var checkAge = (rule, value, callback) => {
        //console.log(rule.max_age)
        if (!value) {
           return callback(new Error('年龄不能为空'));
         }
         if (!Number.isInteger(value)) {
             callback(new Error('请输入数字值'));
          } else {
            if (value < rule.max_age) {
              callback(new Error('必须年满18岁'));
            } else {
              callback();
            }
          }
      };
      export default {
        data() {
          return {
            ruleForm: {
              name: '',
              age:''
            },
            rules: {
              name: [
                { required: true, message: '请输入活动名称', trigger: 'blur' },
                { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
              ],
              age: [
                {max_age:18, validator: checkAge, trigger: 'blur' }// checkAge自定义规则函数
              ]
            }
          };
        },
        methods: {
          submitForm(formName) {
            this.$refs[formName].validate((valid) => {
              if (valid) {
                alert('submit!');
              } else {
                console.log('error submit!!')
              }
            });
          },
          resetForm(formName) {
            this.$refs[formName].resetFields();
          }
        }
      }
    </script>
    

    在el-form上绑定rules,rlues为校验规则,在el-form-item上绑定对应的prop。
    自定义规则,validator:checkAge,自定义规则的函数。
    不啰嗦,详细的可查看element文档http://element-cn.eleme.io/#/zh-CN/component/form

    2.行间校验

    <el-form :model="numberValidateForm" ref="numberValidateForm" label-width="100px" class="demo-ruleForm">
      <el-form-item
        label="年龄"
        prop="age"
        :rules="[
          { required: true, message: '年龄不能为空'},
          { type: 'number', message: '年龄必须为数字值'}
        ]">
        <el-input type="age" v-model.number="numberValidateForm.age" autocomplete="off"></el-input>
      </el-form-item>
    

    可将rule写在各自的el-form-item上

    3.行间自定义校验
    <el-form :model="numberValidateForm" ref="numberValidateForm" label-width="100px" class="demo-ruleForm">
      <el-form-item
        label="年龄"
        prop="age"
        :rules="[
          {max_age:18, validator: checkAge, trigger: 'blur' }
        ]">
        <el-input type="age" v-model.number="numberValidateForm.age" autocomplete="off"></el-input>
      </el-form-item>
    </el-form>
    <script>
      export default {
        data() {
          ...
        },
        methods: {
          checkAge(rule, value, callback){
           //自定义校验规则
            //console.log(rule.max_age)
            if (!value) {
               return callback(new Error('年龄不能为空'));
           }
           if (!Number.isInteger(value)) {
             callback(new Error('请输入数字值'));
            } else {
              if (value < rule.max_age) {
                callback(new Error('必须年满18岁'));
              } else {
                callback();
              }
            }
          },
          ...... 
        }
      }
    </script>
    

    4.行间循环自定义校验

    <el-form>
      <el-form-item
        v-for="(domain, index) in dynamicValidateForm.domains"
        :label="'域名' + index"
        :key="domain.key"
        :prop="`domains.${index}.value`" //绑定的prop
        :rules="[
         { required: true, message: '域名不能为空', trigger: 'blur' },
         {reg:/^--------$/, validator: checkDomain, trigger: 'blur' }
        ]"
      >
    </el-form-item>
    </el-form>
    <script>
      export default {
        data() {
          return {
            dynamicValidateForm: {
              domains: [
                { value: ''},
                { value: ''},
                { value: ''},
              ]
            }
          };
        },
        methods: {
          checkDomain(rule, value, callback){
            //自定义校验规则
            ......
           },
          submitForm(formName) {
            this.$refs[formName].validate((valid) => {
              if (valid) {
                alert('submit!');
              } else {
                console.log('error submit!!');
              }
            });
          }
        }
      }
    </script>
    

    相关文章

      网友评论

          本文标题:el-form的各种校验姿态

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