vue表单验证库async-validator的使用 elementUi + form

          目前使用vue在构建登录注册页面的时候,一般都是引入elementUi的form组件.它添加了async-validator.

大幅提升了开发效率.async-validator是一个用来验证数据规则的一个库.它的github地址是https://github.com/yiminghe/async-validator   .我们可以在elementui里直接使用它.下面介绍它的使用方法.

            其实很简单,我们直接复制eui官网上的代码.早form组件里.它大概长这样儿:

vue表单验证库async-validator的使用 elementUi + form

下面我附上全部的代码:

<template>

    <div>
        <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 label="活动时间" required>
                <el-col :span="11">
                    <el-form-item prop="date1">
                        <el-date-picker type="date" placeholder="选择日期" v-model="ruleForm.date1" style="width: 100%;"></el-date-picker>
                    </el-form-item>
                </el-col>
                <el-col class="line" :span="2">-</el-col>
                <el-col :span="11">
                    <el-form-item prop="date2">
                        <el-time-picker type="fixed-time" placeholder="选择时间" v-model="ruleForm.date2" style="width: 100%;"></el-time-picker>
                    </el-form-item>
                </el-col>
            </el-form-item>
            <el-form-item label="即时配送" prop="delivery">
                <el-switch v-model="ruleForm.delivery"></el-switch>
            </el-form-item>
            <el-form-item label="活动性质" prop="type">
                <el-checkbox-group v-model="ruleForm.type">
                    <el-checkbox label="美食/餐厅线上活动" name="type"></el-checkbox>
                    <el-checkbox label="地推活动" name="type"></el-checkbox>
                    <el-checkbox label="线下主题活动" name="type"></el-checkbox>
                    <el-checkbox label="单纯品牌曝光" name="type"></el-checkbox>
                </el-checkbox-group>
            </el-form-item>
            <el-form-item label="特殊资源" prop="resource">
                <el-radio-group v-model="ruleForm.resource">
                    <el-radio label="线上品牌商赞助"></el-radio>
                    <el-radio label="线下场地免费"></el-radio>
                </el-radio-group>
            </el-form-item>
            <el-form-item label="活动形式" prop="desc">
                <el-input type="textarea" v-model="ruleForm.desc"></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>
    </div>
</template>
<script>
export default {
  data() {
    return {
      ruleForm: {
        name: "",
        region: "",
        date1: "",
        date2: "",
        delivery: false,
        type: [],
        resource: "",
        desc: ""
      },
      rules: {
        name: [
          { required: true, message: "请输入活动名称", trigger: "blur" },
          { min: 3, max: 5, message: "长度在 3 到 5 个字符", trigger: "blur" }
        ],
        region: [
          { required: true, message: "请选择活动区域", trigger: "change" }
        ],
        date1: [
          {
            type: "date",
            required: true,
            message: "请选择日期",
            trigger: "change"
          }
        ],
        date2: [
          {
            type: "date",
            required: true,
            message: "请选择时间",
            trigger: "change"
          }
        ],
        type: [
          {
            type: "array",
            required: true,
            message: "请至少选择一个活动性质",
            trigger: "change"
          }
        ],
        resource: [
          { required: true, message: "请选择活动资源", trigger: "change" }
        ],
        desc: [{ required: true, message: "请填写活动形式", 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>

这是直接复制的eui的官网代码.使用也非常简单.当然肯定要先引入eui啊.script标签里的rules是一个对象,是所有的验证规则.比如对象内的第一个

name: [

{ required: true, message: "请输入活动名称", trigger: "blur" },

{ min: 3, max: 5, message: "长度在 3 到 5 个字符", trigger: "blur" }

],

它表示一个验证规则,数组内共两项,required: true 表示必填项.当然 你也可以更改false为非必填. message为提示的文字信息.trigger为事件类型. min和max一看就懂.不用解释了.需要说的是,它还可以填写正则.因为官网复制下来的这份代码没有这一项.如果要使用,就在数组内添加.比如添加    { pattern: /^[0-9-_]{1,11}$/, message: '联系人手机号码的格式错误!', trigger: 'blur' };  具体的信息一看就懂.也不用解释了.  总之 ,验证规则就这三项,  规则    提示信息  和  事件类型.

   然后在视图使用就更简单了.   :rules绑定验证对象. 每一项用prop绑定验证规则. 使用效果如图:

    在我没有输入信息的情况下点击立即创建  会有以下提示:

vue表单验证库async-validator的使用 elementUi + form