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.rulesthis.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

Element表单验证(2)相关推荐

  1. 【VUE 表单验证】vue Element 表单验证中 多层v-for验证方法

    vue Element 表单验证中 对象有list列表如何验证 正常情况下只需要<el-form-item> 标签中填入prop数据属性即可. <el-form-item label ...

  2. vue+Element表单验证+数字英文密码和手机号验证(详细)

    项目开发时需要用到表单验证,密码验证和手机验证都是使用正则表达式,特此记录一下. 1.表单图 2.代码 <template><!-- 结构 --> //就是你要输入的名称< ...

  3. 解决“element表单验证输入的数字检测出来是string”的问题

    form表单: 校验规则: 注意: 一.数字类型的验证需要在 v-model 处加上 .number 的修饰符,这是 Vue 自身提供的用于将绑定值转化为 number 类型的修饰符. 二.校验中是否 ...

  4. Element表单验证规则

    以下6点总结来自此博文: https://blog.csdn.net/bjLiuqaq/article/details/81030293 是否必须: required:true|| fasle 根据正 ...

  5. element表单验证中的 手机号和身份证 验证

    手机号和身份证 正则表达式: <el-form-item label="电话"prop="customerTel"><el-input v-m ...

  6. Element UI——表单验证输入的数字检测出来是string解决方案

    问题描述 打印 判断类型 问题分析 解决方案 数字类型的验证需要在 v-model 处加上 .number 的修饰符,这是 Vue 自身提供的用于将绑定值转化为 number 类型的修饰符. < ...

  7. 英文、数字和汉字、日文的字符判断 英文占1个字符,中文汉字占2个字符 el-form表单验证规则

    需求:输入框输入如果是中文或者日文,表单验证长度需要除以2,如果是英文或者数字,则正常 需求奇葩,还要国际化可烦死我了,菜鸟又不敢跟产品顶嘴,哭了 捣鼓捣鼓总算好了,对字符限制做了一个封装 1.第一步 ...

  8. 关于vue.js element ui 表单验证 this.$refs[formName].validate()的问题

      方法使用前需了解: 来自"和"小编的小提示: 首先打印一下this.$refs[formName],检查是否拿到了正确的需要验证的form. 其次在拿到了正确的form后,检查 ...

  9. element 表单回显验证_关于vue el-form表单报错的问题

    在写el-form表单的时候,遇到了蛮多问题,在这里记录一下. 1.表单验证报错[Element Warn][Form]model is required for validate to work! ...

最新文章

  1. T4 (Text Template Transformation Toolkit)实现简单实体代码生成
  2. java设计一个顺序表类的成员函数_顺序表代码讲解以及实现
  3. android Bimtap 各种图片处理方法、图片特效
  4. STM32 - 定时器的设定 - 基础 01.1 - Repetition counter
  5. 阿里巴巴P3C java编程规范(最新版github下载)
  6. newifi3刷机 php,新路由3(newifi d2)刷老毛子固件教程-路由器交流
  7. 随机森林树的特点--摘抄笔记
  8. 云计算淡定从容的大局观
  9. 《是男人就下100层》真的有隐藏剧情!B站up主数月破解
  10. 2054339-01-2,N-Boc-N-bis(PEG2-acid)它可以在活化剂(如EDC或HATU)存在下与伯氨基反应
  11. 什么是NP-Hard
  12. php代码输出笑脸,利用HTML5中的Canvas绘制笑脸的代码
  13. 强化学习常用算法总结
  14. 企业微信群机器人怎么用
  15. JavaSE基础 打印杨辉三角
  16. TI 评级报告 | RAI Finance:B,展望正面
  17. FTP协议(文件传输协议)
  18. Java打印机如何加快打印速度_如何提升打印机打印速度
  19. Android 10 设置壁纸流程
  20. R语言使用quantmod包的getSymbols函数从指定金融数据源获取指定时间段的股票数据、美股不使用后缀、其它股票需要使用后缀:大陆沪市使用:“.SS“,深市使用:“.SZ“,香港使用:“.HK

热门文章

  1. Ubuntu中anaconda的安装及使用
  2. [LeetCode]235.Lowest Common Ancestor of a Binary Search Tree
  3. 图像算法移植到DSP及其优化步骤
  4. Windows Phone Developer Registration 开发人员无法连接注册解决
  5. 软件测试的学习之路-----基本的 HTML
  6. 初探webpack之编写plugin
  7. Jest中Mock网络请求
  8. linux运行c程序a. out,无法运行已编译的文件 – bash:./ a.out:权限被拒绝. (我试过chmod)...
  9. devops工作流程_DevOps会偷我的工作吗?
  10. 公有云 私有云 混合云_混合云不断变化的面貌