Element表单验证(2)

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中定义<el-form :model='form'>:model='form',那个form就是sourcesource的字段名,如source.name就是form.name,那么只要在<el-form-item prop='name'>设置和source一样的字段名name,就可以匹配<el-form :rules='rules'>中的rules.name

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

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

    return {
      form: {
        name: ''
      }
    }
  },
  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: 'blur' },
  { min, max, message: `长度在${min}~${max}个字符`, trigger: 'blur' }
])

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

/* 自定义验证规则 */

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

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

export const biggerInt = (int, required = true) => ([
  { required, message: '必填', trigger: 'blur' },
  { validator: biggerAndNum(int), trigger: 'blur' }
])
封装一个专门创建规则的类,链式调用
export default class CreateRules {
  constructor() {
    super()
    this.rules = []
  }

  need(msg = '必填', trigger = 'blur') {
    this.rules.push({
      required: true,
      message: msg,
      trigger
    })
    return this
  }
  
  url(message = '不是合法的链接', trigger = 'blur') {
    this.rules.push({
      type: 'url',
      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 = ['http://www.baidu.com', 'http://www.baidu.com']

const rules = {
  urls: {
    type: 'array',
    min: 1,
    defaultField: isUrl
  }
}

转载于:https://www.cnblogs.com/lantuoxie/p/9305422.html

Vue Element表单验证是什么? Vue Element表单验证是一种基于Vue.js和Element组件库的表单验证方式,通过使用Vue提供的数据驱动的方式,实现实时检测表单输入数据的合法性,并在输入无效时提示错误信息。Vue Element表单验证能够有效地防止用户输入不合法数据,提高应用程序的数据质量。 Vue Element表单验证的特点: 1. 数据驱动:Vue利用双向绑机制,保证了错误信息和表单输入数据的实时更新。 2. 灵活:可以选择自义验证规则或使用Element库提供的验证方法。 3. 原子性:每个表单项的验证都是独立的,互不干扰。 4. 可扩展:可以通过自义指令和插件来扩展验证功能。 Vue Element表单验证的实现方式: 1. 在模板中使用el-form组件包裹表单项,通过设置rules属性指验证规则。 2. 在data中义表单数据,通过v-model指令绑输入框。 3. 在methods中义提交表单方法,通过this.$refs.form.validate()方法进行表单验证。 4. 根据验证结果来决是否提交表单数据。 Vue Element表单验证的基本规则: 1. required:必填项。 2. min/max:最小/最大。 3. pattern:正则表达式。 4. validator:自义验证函数。 需要注意的是,使用Element表单验证规则时,需要在el-form-item组件中使用prop属性指的数据项。 Vue Element表单验证的优缺点: 优点: 1. 数据和视图之间绑紧密,实时更新错误信息和表单数据。 2. 可以选择自义验证规则或使用Element提供的验证类,具有灵活性。 3. 可以有效预防用户输入不合法数据,提高数据质量。 4. 可扩展性强,可以通过自义指令和插件来扩展验证功能。 缺点: 1. 对于复杂的表单结构,需要编写大量的验证规则。 2. 使用Element库自带的验证规则时,需要掌握Element库的使用方法。 3. 自义验证规则时需要了解正则表达式的使用,对于一些开发者来说可能存在一的难度。 总结: Vue Element表单验证是一种非常方便使用的表单验证方式,能够有效地预防用户输入不合法数据,提高应用程序的数据质量。同时,Vue Element表单验证也具有灵活性和可扩展性,可以根据具体业务需求自义验证规则或使用Element提供的验证类,实现更加精细的验证效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值