首页 >web前端 >js教程 >vue中Element表单验证的使用方法

vue中Element表单验证的使用方法

不言
不言原创
2018-07-14 15:54:493923浏览

这篇文章主要介绍了关于vue中Element表单验证的使用方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

Element表单验证(2)

上篇讲的是async-validator的基本要素,那么,如何使用到Element中以及怎样优雅地使用,就在本篇。

上篇讲到async-validator由3大部分组成

  • Options

  • Validate

  • Rules

基本验证流程如下

  • 先按照rule的规则,制定每个字段的规范,生成rules

  • 根据rules生成验证器const validator = new Validator(rules)

  • 验证器有验证函数validator.validate(source, callback)

  • source中的字段对应规则中的字段,全都通过或出错后调用callback

上面中的validator.validate对应Element中的this.$refs[refName].validate,只不过被改装过的。而且在Element中定义6318c82ba75c0d37c9e07a5e3a190627:model='form',那个form就是sourcesource的字段名,如source.name就是form.name,那么只要在bca042cba593f1573cf694560c9ca72b设置和source一样的字段名name,就可以匹配6c2c070c39c65767ded6e6164e80272c中的rules.name

很重要的一点,rules.字段名要和source.字段名要一样才会验证。

<template>
  <el-form :model=&#39;form&#39; ref=&#39;domForm&#39; :rules=&#39;rules&#39;>
    <el-form-item prop=&#39;name&#39; lable=&#39;名字&#39;>
      <el-input v-model=&#39;form.name&#39;>
    </el-form-item>
  </el-form>
</template>
export default {
  data() {
    this.rules = {
      name: { type: &#39;string&#39;, required: true, trigger: &#39;blur&#39; }
    }

    return {
      form: {
        name: &#39;&#39;
      }
    }
  },
  methods: {
    submit() {
      this.$refs.domForm.validate(valid => {
        if (!valid) {
          // 验证不通过
        }

        // 验证通过后的处理...
      })
    }
  }
}

上面中validate(callback)函数已经添加到form元素DOM节点上的属性中。然后上面还有一个不好的一点。那就是规则的定义方式不够灵活。

比如我有两个字段firstNamelastNamefirstName是必填的,而lastName是非必填的;且firstName长度要求大于1小于4而lastName要求大于1小于6。那么就要写两个不同的规则,现在只是2个字段而已,没什么,如果有很多个不同要求的字段,那要写很多个不同的规则,也要写很多个规则?岂不是很烦?能不能复用?

Rules三种定义方式

  • 函数的方式:{ name(rule, value, callback, source, options) {} }

  • 对象的方式: { name: { type: 'string', required: true } }

  • 数组的方式: { name: [{ type: 'string' }, { required: true }] }

函数的方式很强大,如果需要用到options可以函数的方式,最常用的是对象和数组的方式。现在推荐几种复用的方法。

简单的封装一些常用的规则

// 返回一个规则数组,必填且字符串长度在2~10之间
export const name = (msg, min = 2, max = 10, required = true) => ([
  { required, message: msg, trigger: &#39;blur&#39; },
  { min, max, message: `长度在${min}~${max}个字符`, trigger: &#39;blur&#39; }
])

// 邮箱
export const email = (required = true) => ([
  { required, message: &#39;请输入邮箱&#39;, trigger: &#39;blur&#39; },
  { type: &#39;email&#39;, message: &#39;邮箱格式不对&#39;, trigger: &#39;blur&#39; }
])

/* 自定义验证规则 */

// 大于等于某个整数
const biggerAndNum = num => (rule, v, cb) => {
  const isInt = /^[0-9]+$/.test(v)
  if (!isInt) {
    return cb(new Error(&#39;要求为正整数&#39;))
  }

  if (v < num) {
    return cb(new Error(`要求大于等于${num}`))
  }
  return cb()
}

export const biggerInt = (int, required = true) => ([
  { required, message: &#39;必填&#39;, trigger: &#39;blur&#39; },
  { validator: biggerAndNum(int), trigger: &#39;blur&#39; }
])

封装一个专门创建规则的类,链式调用

export default class CreateRules {
  constructor() {
    super()
    this.rules = []
  }

  need(msg = &#39;必填&#39;, trigger = &#39;blur&#39;) {
    this.rules.push({
      required: true,
      message: msg,
      trigger
    })
    return this
  }
  
  url(message = &#39;不是合法的链接&#39;, trigger = &#39;blur&#39;) {
    this.rules.push({
      type: &#39;url&#39;,
      trigger,
      message
    })
    return this
  }

  get() {
    const res = this.rules
    this.rules = []
    return res
  }
}

const createRules = new CreateRules()

//规则
const needUrl = createRules.need().url().get()
const isUrl = createRules.url().get()

// imgUrl必填且是链接;href可选不填,如果填写必须是链接
const rules = {
  imgUrl: needUrl,
  href: isUrl
}

// deep rule 定义
// urls是数组,长度大于1
// urls的元素是链接
const urls = [&#39;http://www.baidu.com&#39;, &#39;http://www.baidu.com&#39;]

const rules = {
  urls: {
    type: &#39;array&#39;,
    min: 1,
    defaultField: isUrl
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网! 

 相关推荐:

Vue中Element表单验证的基本要素

Vue中for in对象时如何解决属性为非负整数的问题

以上是vue中Element表单验证的使用方法的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn