转载文章: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
}
}

async-validator:Element表单验证的更多相关文章

  1. Element表单验证(1)

    Element表单验证(1) 首先要掌握Element官方那几个表单验证的例子,然后才看下面的教程. Element主要使用了async-validator这个库作为表单验证 async-valida ...

  2. Element表单验证(2)

    Element表单验证(2) 上篇讲的是async-validator的基本要素,那么,如何使用到Element中以及怎样优雅地使用,就在本篇. 上篇讲到async-validator由3大部分组成 ...

  3. MVC身份验证.MVC过滤器.MVC6关键字Task,Async.前端模拟表单验证,提交.自定义匿名集合.Edge导出到Excel.BootstrapTree树状菜单的全选和反选.bootstrap可搜索可多选可全选下拉框

    1.MVC身份验证. 有两种方式.一个是传统的所有控制器继承自定义Control,然后再里面用MVC的过滤器拦截.所以每次网站的后台被访问时.就会先走入拦截器.进行前端和后端的验证 一个是利用(MVC ...

  4. vue+element 表单验证

    效果图 <template> <div class="formValidator"> <div v-for="(item,index) in ...

  5. vue element 表单验证不通过,滚动到固对应位置

    我们在使用elementIUI实现表单验证,内容比较多的时候,提示内容会被遮挡,这时候用户不清楚什么情况,还会连续点击提交按钮.这个时候需求来啦:我们需要在表单验证不通过的时候,页面滚动到对应的位置. ...

  6. Element表单验证规则

    一.简单的逻辑验证使用方法: 方法步骤: 1.在html中给el-form增加 :rules="rules" 2.html中在el-form-item 中增加属性 prop=&qu ...

  7. Element 表单验证,不清空数据,仅仅取消表单字段校验

    重置表单 this.$refs['ageForm'].resetFields() // 表单重置 仅清空校验 this.$refs['ageForm'].clearValidate() // 清除验证

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

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

  9. 使用 hibernate validator 进行表单验证

    1 引入依赖,如果是 Maven 项目,仅需要添加如下依赖.官网请查看http://hibernate.org/validator/documentation/getting-started/ < ...

随机推荐

  1. python读取excel数据并以第一行标题加内容组成字典格式返回

    excel结构如图所示: 代码: import xlrd ''' 通用获取excel数据 @:param path excel文件路径 @:param sheet_name excel文件里面shee ...

  2. Delphi阿里云短信【支持短信发送、短信批量发送和查询短信发送记录】

    作者QQ:(648437169) 点击下载➨Delphi阿里云短信             阿里云api文档 [Delphi 阿里云短信]是最新的阿里云短信接口,不是阿里大于短信接口,支持SendSm ...

  3. HTTP: Request中的post和get区别

    * GET和POST之间的主要区别 1.GET是从服务器上获取数据,POST是向服务器传送数据. 2.在客户端, get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段 ...

  4. GoLang 的变量

    变量 1.为什么要变量 1.1.一个程序就是一个世界 1.2.变量是程序的基本组成单位 2.变量的介绍 2.1.变量的概念 变量相当于内存中一个数据存储空间的表示,你可以把变量看做是一个房间的门牌号, ...

  5. tkinter基础-输入框、文本框

    本节内容 了解输入框.文本框的使用方法 利用1制作简易界面 首先明确上面由几个元素组成:该界面由界面标题,输入框.两个按钮.文本框组成. 该界面我们需要实现的功能: 在输入框中输入文字,点击inser ...

  6. 关于如何控制一个页面的Ajax读数据只读一次的简单解决办法!

    例如:一个页面有一个按钮,点击的时候用ajax去后台获取数据,获取成功以后返回.下次再点击的时候就不要去获取数据了. 解决办法有很多: 1.用Get方法去读数据,会缓存. 2.用jquery的data ...

  7. rename file

    https://askubuntu.com/questions/790633/the-o-parameter-in-aria2c-cant-rename-the-downloaded-file You ...

  8. aria2 adduri

    demo, ok import 'package:flutter/material.dart'; import 'package:permission_handler/permission_handl ...

  9. 个人项目—WC

     一,Github地址:https://github.com/mushan520/WC.git 二.PSP表格: PSP2.1 Personal Software Process Stages 预估耗 ...

  10. oracle 如何预估将要创建的索引的大小

    一.1  oracle 如何预估将要创建的索引的大小 oracle 提供了2种可以预估将要创建的索引大小的办法: ①  利用包 Dbms_space.create_index_cost 直接得到 ②  ...