async-validator:Element表单验证
转载文章: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
就是source
。source
的字段名,如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节点上的属性中。然后上面还有一个不好的一点。那就是规则的定义方式不够灵活。
比如我有两个字段firstName
和lastName
。firstName
是必填的,而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表单验证的更多相关文章
- Element表单验证(1)
Element表单验证(1) 首先要掌握Element官方那几个表单验证的例子,然后才看下面的教程. Element主要使用了async-validator这个库作为表单验证 async-valida ...
- Element表单验证(2)
Element表单验证(2) 上篇讲的是async-validator的基本要素,那么,如何使用到Element中以及怎样优雅地使用,就在本篇. 上篇讲到async-validator由3大部分组成 ...
- MVC身份验证.MVC过滤器.MVC6关键字Task,Async.前端模拟表单验证,提交.自定义匿名集合.Edge导出到Excel.BootstrapTree树状菜单的全选和反选.bootstrap可搜索可多选可全选下拉框
1.MVC身份验证. 有两种方式.一个是传统的所有控制器继承自定义Control,然后再里面用MVC的过滤器拦截.所以每次网站的后台被访问时.就会先走入拦截器.进行前端和后端的验证 一个是利用(MVC ...
- vue+element 表单验证
效果图 <template> <div class="formValidator"> <div v-for="(item,index) in ...
- vue element 表单验证不通过,滚动到固对应位置
我们在使用elementIUI实现表单验证,内容比较多的时候,提示内容会被遮挡,这时候用户不清楚什么情况,还会连续点击提交按钮.这个时候需求来啦:我们需要在表单验证不通过的时候,页面滚动到对应的位置. ...
- Element表单验证规则
一.简单的逻辑验证使用方法: 方法步骤: 1.在html中给el-form增加 :rules="rules" 2.html中在el-form-item 中增加属性 prop=&qu ...
- Element 表单验证,不清空数据,仅仅取消表单字段校验
重置表单 this.$refs['ageForm'].resetFields() // 表单重置 仅清空校验 this.$refs['ageForm'].clearValidate() // 清除验证
- 解决“element表单验证输入的数字检测出来是string”的问题
form表单: 校验规则: 注意:一.数字类型的验证需要在 v-model 处加上 .number 的修饰符,这是 Vue 自身提供的用于将绑定值转化为 number 类型的修饰符.二.校验中是否添加 ...
- 使用 hibernate validator 进行表单验证
1 引入依赖,如果是 Maven 项目,仅需要添加如下依赖.官网请查看http://hibernate.org/validator/documentation/getting-started/ < ...
随机推荐
- 字符串A转换到字符串B,只能一次一次转换,每次转换只能把字符串A中的一个字符全部转换成另一个字符,是否能够转换成功
public class DemoTest { public static void main(String[] args) { System.)); } /** * 有一个字符串A 有一个字符串B ...
- DataTable Distinct
DataView dataView = dtTemp.DefaultView; DataTable dataTableDistinct = dataView.ToTable(true, "U ...
- 洛谷P3984-数据结构 题解
题面 这题精,真的精 前言:不要被题目背景和描述误导! Solution: 题目大意 给定一段序列,请你做到区间修改和区间询问. 区间询问即 在 \(L\) 到 \(R\) 区间内,乘上下标后取模的值 ...
- Django-05-视图函数
http请求中产生两个核心对象: http请求:HttpRequest对象 http响应:HttpResponse对象 所在位置:django.http 之前我们用到的参数request就是HttpR ...
- LeetCode 5216. 统计元音字母序列的数目(Java)DP
5216. 统计元音字母序列的数目 给你一个整数 n,请你帮忙统计一下我们可以按下述规则形成多少个长度为 n 的字符串: 字符串中的每个字符都应当是小写元音字母('a', 'e', 'i', 'o', ...
- CF1063F String Journey DP、SAM、线段树
传送门 为了方便把串反过来,条件变为\(t_i\)是\(t_{i+1}\)的真子串,答案显然不变. 一件重要的事情是必定存在一种最优解,字符串序列\(\{t\}\)满足\(|t_i| = i\). 考 ...
- Java——简单实现学生管理系统
import java.io.*;import java.util.ArrayList;import java.util.Scanner;class MyObjectOutputStream exte ...
- linux搭建GitLab
GitLab CentOS6 1. 安装VMware和CentOS 2. 安装必备Linux插件 3. 准备安装GitLab 4. 开始安装GitLab 5. 配置GitLab 6. 启动GitLab ...
- map小列
// 有关学生信息的头文件student.h代码如下 #include #include using namespace std; struct Student ...
- MySQL计算相邻两行某列差值的方法
简述 博主最近因工作任务缠身,都无暇顾及到我的这片自留地了.前段时间稍有空闲,花了较多的精力学习<啊哈算法>,从中学习到很多之前没有太注重的内容,收益颇丰.但是这些算法题目还没有看完,等后 ...