Vue表单验证插件的制作过程
一、表单验证模块的构成
任何表单验证模块都是由 配置――校验――报错――取值 这几部分构成的。
配置: 配置规则 和配置报错,以及优先级
 校验: 有在 change 事件校验, 在点击提交按钮的时候校验, 当然也有在input事件取值的
 报错: 报错方式一般要分,报错的文字有模板,也有自定义的
 取值: 将通过验证的数据返还给开发者调用
下面是我老大针对公司项目给我提出的要求
集中式的管理 校验规则 和 报错模板。
 报错时机可选
 校验正确后的数据,已经打包成对象,可以直接用
 允许各个页面对规则进行覆盖,对报错信息进行自定义修改,以及允许ajax获取数据后,再对规则进行补充
 按顺序来校验,在第一个报错的框弹出错误
规则的构造函数
//va配置的构造函数
function VaConfig(type, typeVal, errMsg, name, tag){
 this.type = type, this.typeVal = typeVal, this.errMsg = errMsg, this.name = name, this.tag = tag
}
 type: nonvoid(非空), reg(正则), limit(区间), equal(与某个input相等),unique(不能相同)
 typeVal: 根据不同type设置不同的值
 errMsg: 自定义的报错信息
 name: 用来传ajax的字段,如Password, Username
 tag:用来报错的名字,如‘银行账号',‘姓名'
设置了三种规则
1.默认规则: 只要绑定指令,就默认有的校验。 比如非空的校验。 可以额外加修饰符来去除
2.选项规则: 通过Vue指令的修饰符添加的规则。
3.自定义规则: Vue指令属性值上添加的规则。
同一个type的规则只存在一个,也就是说,如果type为reg(正则),那么会互相覆盖。 
覆盖的优先级: 自定义规则 > 选项规则 > 默认规则
思路讲的多了。也不知道怎么讲了,下面大家直接看源码把。
源码
/*
* 流程: 绑定指令-> 设置配置(vaConfig) -> 校验(check) -> 报错(showErr) 或 自定义报错
 */
var va = {};
function unique(arr){
 var hashTable = {}, newArr = [];
 for(var i = 0;i < arr.length;i++){
 if(!hashTable[arr[i]]){
 hashTable[arr[i]] = true;
 newArr.push(arr[i]);
 }
 }
 return newArr;
}
function addClass(dom, _class){
 var hasClass = !!dom.className.match(new RegExp('(\\s|^)' + _class + '(\\s|$)'))
 if(!hasClass){
 dom.className += ' ' + _class
 }
}
//校验函数
function check(v, conditions){
 var res = 0; //0代表OK, 若为数组代表是某个字段的错误
 //验证函数
 var cfg = {
 //非空
 nonvoid: (v, bool)=>{
 if(bool){
 return v.trim() ? 0 : ['nonvoid'];
 }else{
 return 0;
 }
 },
 reg:(v, reg)=> reg.test(v) ? 0 : ['reg'], //正则
 limit:(v, interval)=> (+v >= interval[0] && +v <= interval[1]) ? 0 : ['limit', interval],
 equal: (v, target)=>{ //和什么相等
 var _list = document.getElementsByName(target), _target
 for(var i = 0;i < _list.length;i++){
 if(_list[i].className.indexOf('va') > -1){
 _target = _list[i];
 }
 }
 return (_target.value === v) ? 0 : ['equal', _target.getAttribute('tag')]
 },
 unique:(v)=>{
 var _list = document.getElementsByClassName('unique'),
 valList = [].map.call(_list, item=>item.value)
 return (unique(valList).length === valList.length) ? 0 : ['unique']
 }
 }
 for(var i = 0;i < conditions.length;i++){
 var condi = conditions[i],
 type = condi.type,
 typeVal = condi.typeVal
 res = cfg[type](v, typeVal)
 // console.log(res, v, type,typeVal)
 //如果有自定义报错信息, 返回自定义的报错信息
 console.log(res)
 if(res){
 res = condi.errMsg || res
 break
 }
 }
 return res;
}
function showErr(name, checkResult){
 var type = checkResult[0],
 ext = checkResult[1] || []
 var ERR_MSG = {
 nonvoid: `${name}不能为空`,
 reg: `${name}格式错误`,
 limit: `${name}必须在${ext[0]}与${ext[1]}之间`,
 equal: `两次${ext}不相同`,
 unique: `${name}重复`
 }
 //使用layer来报错,如果需要自定义报错方式,要把全文的layer集中起来包一层。
 layer.msgWarn(ERR_MSG[type])
}
/**
 * [VaConfig va配置的构造函数]
 * @param {[string]} type [校验类型,如reg, limit等等]
 * @param {[*]} typeVal [根据校验类型配置的值]
 * @param {[string]} errMsg [报错信息]
 * @param {[string]} name [用以ajax的字段名]
 * @param {[string]} tag [中文名,用以报错]
 */
Vue表单验证插件的制作过程的更多相关文章
- 写一个简单易用可扩展vue表单验证插件(vue-validate-easy)
		
写一个vue表单验证插件(vue-validate-easy) 需求 目标:简单易用可扩展 如何简单 开发者要做的 写了一个表单,指定一个name,指定其验证规则. 调用提交表单方法,可以获取验证成功 ...
 - Vue 表单验证插件
		
verify github:https://github.com/liuyinglong/verifynpm:https://www.npmjs.com/package/vue-verify-plug ...
 - 一个不错的vue表单验证插件
		
github文档 用着不错,官方的文档例子很简单 <body> <div id="app"> <validator name="valida ...
 - VeeValidate——vue2.0表单验证插件
		
一.vee-validate入门 vee-validate 是一个轻量级的 vue表单验证插件.它有很多开箱即用的验证规则,也支持自定义验证规则.它是基于模板的,因此它与HTML5验证API类似且熟悉 ...
 - 10个强大的Javascript表单验证插件推荐
		
创建一个JavaScript表单验证插件,可以说是一个繁琐的过程,涉及到初期设计.开发与测试等等环节.实际上一个优秀的程序员不仅是技术高手,也应该是善假于外物的.本文介绍了10个不错的JavaScri ...
 - jquery validate表单验证插件-推荐
		
1 表单验证的准备工作 在开启长篇大论之前,首先将表单验证的效果展示给大家. 1.点击表单项,显示帮助提示 2.鼠标离开表单项时,开始校验元素 3.鼠标离开后的正确.错误提示及鼠标移入时的帮 ...
 - jquery validate表单验证插件
		
1 表单验证的准备工作 在开启长篇大论之前,首先将表单验证的效果展示给大家. 1.点击表单项,显示帮助提示 2.鼠标离开表单项时,开始校验元素 3.鼠标离开后的正确.错误提示及鼠标移入时的帮 ...
 - Jquery.validate.js表单验证插件的使用
		
作为一个网站web开发人员,以前居然不知道还有表单验证这样好呀的插件,还在一行行写表单验证,真是后悔没能早点知道他们的存在. 最近公司不忙,自己学习一些东西的时候,发现了validation的一个实例 ...
 - jQuery formValidator表单验证插件
		
什么是jQuery formValidator? jQuery formValidator表单验证插件是客户端表单验证插件. 在做B/S开发的时候,我们经常涉及到很多表单验证,例如新用户注册,填写个人 ...
 
随机推荐
- CSS3中2D/3D转换、过渡、动画
			
转换.过渡.动画 2D 转换 1.translate() 方法 通过 translate() 方法,元素从其当前位置移动,根据给定的 left(x 坐标) 和 top(y 坐标) 位置参数: 实例 d ...
 - CentOS 编译golang
			
CentOS 安装Mercurial http://hi.baidu.com/lang2858/item/cda8f6026cd522e0f45ba67f 获取代码 $ hg clone -u rel ...
 - elasticsearch 中文API    bulk(六)
			
bulk API bulk API允许开发者在一个请求中索引和删除多个文档.下面是使用实例. import static org.elasticsearch.common.xcontent.XCont ...
 - mysql复制关系
			
一旦建立好主从复制关系后就不要在从库上执行任何dml和ddl操作,包括创建用户也不行. 那么万一在从库上执行了dml或者ddl操作了,会有何影响,以及如何恢复? slave同步状态中出现Slave_S ...
 - HZOI20190817模拟24
			
题面:https://www.cnblogs.com/Juve/articles/11369181.html A:Star Way To Heaven 考场上以为只能走直线,于是挂掉了. 有一种方法是 ...
 - html常用标签详解3-a标签
			
a标签 1.a标签的属性 a标签属于行内元素标签,双标签<a></a> href:a标签的跳转地址 target:打开方式(_self自身:_blank:新窗口) title: ...
 - JavaSE_05_反射
			
1.什么是反射? Java反射说的是在运行状态中,对于任何一个类,我们都能够知道这个类有哪些方法和属性.对于任何一个对象,我们都能够对它的方法和属性进行调用.我们把这种动态获取对象信息和调用对象方法的 ...
 - 利用PHP获取访客IP、地区位置、浏览器及来源页面等信息
			
这篇文章主要介绍了利用PHP获取访客IP.地区位置.浏览器及来源页面等信息的相关资料,文中给出了详细的示例代码供大家参考学习,对大家具有一定的参考借鉴价值,需要的朋友们下面来一起看看吧. 前言 本文中 ...
 - html如何设置表格单元格内容垂直居中?
			
父元素设置为表格的单元格元素td,而在表格单元格中的元素设置vertical-align: middle; 对父容器(td)使用:display: table-cell 其内子元素使用:vertica ...
 - 简单的选项卡制作(原生JS)
			
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...