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

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

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

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

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

img

下面我附上全部的代码:

<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: /1{1,11}$/, message: ‘联系人手机号码的格式错误!’, trigger: ‘blur’ }; 具体的信息一看就懂.也不用解释了. 总之 ,验证规则就这三项, 规则 提示信息 和 事件类型.

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

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

img


  1. 0-9-_ ↩︎

<think>好的,我现在需要帮助用户了解在Vue使用async-validator的方法以及解决常见问题。首先,我得回忆一下async-validator的基本用法,然后结合Vue框架的具体实现步骤。根据用户提供的引用内容,特别是引用3和4,里面提到了在Vue和Element UI中的使用,还有具体的代码示例。我需要整理这些信息,确保步骤清晰,并且覆盖安装、引入、配置规则、实例化、校验处理等环节。 接下来,常见问题部分可能需要考虑用户在使用过程中可能遇到的错误,比如规则不生效、异步校验处理、自定义验证函数等问题。需要从提供的引用中找到对应的解决方案,比如引用4中的配置规则示例,或者引用1提到的项目常见问题解决方案。此外,用户可能对如何与UI如Element UI结合使用感兴趣,需要详细说明。 还要注意用户提到的生成相关问题,这部分需要根据内容提出相关的问题,比如如何自定义规则、如何处理异步校验等。确保问题与前面的教程内容相关,并且能够引导用户进一步深入学习。 最后,检查是否符合用户给出的系统级指令,比如数学公式的格式是否正确(虽然这里可能用不上),使用中文回答,结构清晰,引用正确标注等。确保没有遗漏任何步骤,并且信息准确可靠。</think>### Vueasync-validator 使用教程及常见问题解决 #### 一、基础使用教程 1. **安装依赖** 通过包管理器安装 async-validator: ```bash yarn add async-validator # 或 npm install async-validator ``` 2. **引入依赖** 在 Vue 组件中引入: ```javascript import AsyncValidator from &#39;async-validator&#39;; ``` 3. **配置验证规则** 定义字段的验证规则对象,例如: ```javascript const rules = { username: { type: &#39;string&#39;, required: true, message: &#39;用户名不能为空&#39; }, password: { type: &#39;string&#39;, min: 6, message: &#39;密码至少6位&#39; } }; ``` 4. **实例化验证器** 根据规则创建验证实例: ```javascript const validator = new AsyncValidator(rules); ``` 5. **执行校验** 调用 `validate` 方法验证数据: ```javascript validator.validate({ username: &#39;test&#39;, password: &#39;123&#39; }, (errors, fields) => { if (errors) { console.log(errors[0].message); // 输出首个错误 } else { console.log(&#39;验证通过&#39;); } }); ``` #### 二、与 Element UI 结合使用 Element UI 的表单组件已内置 async-validator,可直接通过 `rules` 属性配置: ```vue <template> <el-form :model="form" :rules="rules" ref="formRef"> <el-form-item label="用户名" prop="username"> <el-input v-model="form.username"></el-input> </el-form-item> </el-form> </template> <script> export default { data() { return { form: { username: &#39;&#39; }, rules: { username: [ { required: true, message: &#39;必填项&#39;, trigger: &#39;blur&#39; } ] } }; } }; </script> ``` #### 三、常见问题解决 1. **规则未生效** - **原因**:未正确定义 `prop` 属性或规则类型不匹配。 - **解决**:确保表单项的 `prop` 与规则字段名一致,且数据类型匹配[^3]。 2. **异步自定义验证** 通过 `validator` 函数实现异步校验: ```javascript const rules = { email: { validator: (rule, value, callback) => { setTimeout(() => { if (value.includes(&#39;@&#39;)) callback(); else callback(new Error(&#39;邮箱格式错误&#39;)); }, 500); } } }; ``` 3. **动态修改规则** 直接更新 `rules` 对象并重新绑定到组件即可[^4]。 4. **错误信息显示位置** 在 Element UI 中,错误信息默认显示在表单项下方,可通过 CSS 或 `show-message` 属性控制。 #### 四、进阶用法 - **多字段联合校验**:在 `validate` 方法中访问其他字段值,通过闭包或 Vue 响应式数据实现。 - **国际化支持**:结合 `i18n` 动态切换错误消息语言。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值