怎么使用async-validator快速校验表单

简介: 怎么使用async-validator快速校验表单

怎么使用async-validator快速校验表单


async-validator的官方文档,真真"通俗易懂"。

为自己以后快速使用,这边写了个简单使用方法。

校验单个表单元素

先看demo:

网络异常,图片无法展示
|

<template lang="pug">
div
  input(v-model="title" @input="validateValue") 
  div(v-if="errorMessage") {{errorMessage}}
</template>
<script>
import Schema from "async-validator";
// 自定义规则函数的模板
const validateData = (rule, value, callback) => {
  let errorMessage;
  if (value === "坏蛋") {
    errorMessage = "请文明用语";
  }
  callback(errorMessage);
};
export default {
  data() {
    return {
      config: {
        modelKey: "title",
        label: "标题",
        rule: [
          { required: true, message: "标题不能为空" },
          { min: 3, message: "长度最小是3" },
          { max: 6, message: "长度最大是6" },
          validateData
        ]
      },
      title: "",
      errorMessage: ""
    };
  },
  methods: {
    // 封装 校验单个表单元素的值是否有效。参数:单个表单元素的配置、表单元素的value
    // 返回值是promise类型, {isValid:true,errorMessages:["xx","ddd"]}
    validateFormItem(config, value) {
      // 获取绑定的是什么属性
      const { modelKey, rule } = config;
      // 1. 通过描述信息创建一个骨架
      const schema = new Schema({ [modelKey]: rule });
      // 2. 将结果扔出去
      return new Promise(resolve => {
        schema.validate({ [modelKey]: value }, err => {
          // 没有错误,就说明是有效值
          if (!err) {
            resolve({ isValid: true });
            return;
          }
          // 错误的话,拿到所有的错误信息列表
          let errorMessages = err.map(item => item.message);
          resolve({ isValid: false, errorMessages });
        });
      });
    },
    // 使用校验
    async validateValue() {
      // 异步方法
      const { isValid, errorMessages } = await this.validateFormItem(
        this.config,
        this.title
      );
      if (isValid) {
        this.errorMessage = "";
        return;
      }
      // 有错误的话 显示所有错误信息
      this.errorMessage = errorMessages.join(" / ");
    }
  }
};
</script>

使用方法:

  • 用描述信息创建Schema实例
  • schema.validate是一个异步操作,这边用promise
  • rule规则里,可以使用官方自带的一些校验规则,也可以写个自定义规则的函数

校验整个表单

还是先看demo:

网络异常,图片无法展示
|

<template lang="pug">
form
  div(v-for="(config,index) in configs" :key="index")
    label {{config.label}}
    input(v-model="formData[config.modelKey]" @input="validateValue(config)")
    span(v-if="config.errorMessage" style="color:'red'")  {{config.errorMessage}}
  button(@click.stop="submit") 点击提交
</template>
<script>
import Schema from "async-validator";
const validateData = ...
export default {
  data() {
    return {
      formData: {
        title: "",
        content: ""
      },
      configs: [
        {
          modelKey: "title",
          label: "标题",
          rule: [
            { required: true, message: "标题不能为空" },
            { min: 3, message: "长度最小是3" },
            { max: 6, message: "长度最大是6" },
            validateData
          ],
          errorMessage: ""
        },
        {
          modelKey: "content",
          label: "内容",
          rule: [{ required: true, message: "内容不能为空" }],
          errorMessage: ""
        }
      ]
    };
  },
  methods: {
    validateFormItem(config, value) {...}
    async validateValue(config) {
      // 异步方法
      const { isValid, errorMessages } = await this.validateFormItem(
        config,
        this.formData[config.modelKey]
      );
      if (isValid) {
        config.errorMessage = "";
        return;
      }
      // 有错误的话 显示所有错误信息
      config.errorMessage = errorMessages.join(" / ");
    },
    submit() {
      const isOk = this.configs.every(item => !item.errorMessage);
      alert(isOk ? "提交成功" : "不符合规范哟");
    }
  }
};
</script>

这里其实就是通过配置的形式,简单实现了表单的验证。

目录
相关文章
|
8月前
|
JavaScript 前端开发 数据安全/隐私保护
Javascript知识【validation插件重写表单注册校验】
Javascript知识【validation插件重写表单注册校验】
|
JavaScript
VUE element-ui之form表单自定义验证11位手机号码(封装验证规则)
VUE element-ui之form表单自定义验证11位手机号码(封装验证规则)
3312 0
VUE element-ui之form表单自定义验证11位手机号码(封装验证规则)
|
30天前
|
JavaScript
vue实现多个el-form表单提交统一校验的2个方法
vue实现多个el-form表单提交统一校验的2个方法
11 0
|
移动开发 小程序 JavaScript
uniapp form表单validator函数校验
uniapp form表单validator函数校验
uniapp form表单validator函数校验
|
前端开发 Java Spring
更简洁的参数校验,使用 SpringBoot Validation 对参数进行校验
在开发接口时,如果要对参数进行校验,你会怎么写?编写 if-else 吗?虽然也能达到效果,但是不够优雅。 今天,推荐一种更简洁的写法,使用 SpringBoot Validation 对方法参数进行校验,特别是在编写 Controller 层的方法时,直接使用一个注解即可完成参数校验。
289 0
更简洁的参数校验,使用 SpringBoot Validation 对参数进行校验
|
JavaScript 前端开发
将jquery validate校验框架的remote异步验证设置为同步校验
将jquery validate校验框架的remote异步验证设置为同步校验
286 0
将jquery validate校验框架的remote异步验证设置为同步校验
|
JavaScript
JFinal 参数校验插件扩展,让后台参数校验像js一样方式好用
一、插件实现 插件的功能就是加载校验规则,实现代码如下 package com.nmtx.plugins.validation; import java.util.Properties; import com.
|
前端开发 JavaScript
使用bootstrap-Validator校验表单
前端UI框架选择bootstrap,那么bootstrap-Validator作为表单校验是一个不错的选择。 以下内容前提是UI框架采用bootstrap。
1469 0