Vue from-validate 表单验证的示例代码


Posted in Javascript onSeptember 26, 2017

前言

需要进行表单数据验证,原先才用html5来完成验证,但是效果很差,也不够灵活,所以需要进行自定义的表单验证,网上的插件都太过庞大,项目并没有这么多的需求。
那让我们自己来写一个吧!

知识准备

vue的自定义指令

具体可以看官方手册,连接如下:https://vuejs.org/v2/guide/custom-directive.html

总的来说就是可以帮你在指定的钩子函数中跳用你的函数,参数(el,binding, vnode)

  • el: 绑定的dom
  • binding: 指令的各项属性
  • vnode: Vue 编译生成的虚拟节点

开始

1、指令的申明

需要注意的是参数在背绑定上后不会被所以要才用闭包的方式

Vue.directive('validate', {
 // 在指令第一次背绑定上时调用
 bind(el, binding, vnode) {
 }
}
<form id="red-package" @submit.prevent="submit" v-validate.formData="validate">
 ...
 <button type="submit" class="save">保存</button>
</form>

2、解析参数

Vue.directive('validate', {
 // vm对象,就是组件
 const vm = vnode.context;
 // 获得参数绑定的参数,就是规则对象
 const validate = binding.value;
 // 获得数据的key
 const dataKey = Object.keys(binding.modifiers)[0];
});

3、输入内容改变时进行规则验证

el.addEventListener('change', (e) => {
 try {
  // 事件触发的input标签名
  const changeElName = e.srcElement.name;
  // 如果未设定规则不验证
  if (validate[changeElName]) {
   // 把表单的所有参数传入
   validate[changeElName](vm[dataKey]);
   // 检验成功添加成功的class
   Util.removeClass(e.srcElement, 'success');
  }
 } catch (err) {
  // 抛出异常添加失败的class
  Util.addClass(e.srcElement, 'error');
 }
});

4、在提交时对所有数据进行校验

// 有更好的方案
el.getElementsByTagName('button')[0].addEventListener('click', (e) => {
 try {
  // 遍历对象
  Object.keys(vm[dataKey]).forEach((item) => {
   if (validate[item]) {
    validate[item](vm[dataKey]);
   }
  });
 } catch (err) {
  // 抛出错误提示
  vm.loading({
   text: '请检查参数',
  });
  vm.loaded(1000);
  // 阻止submit
  e.preventDefault();
 }
});

5、校验规则实例

amountRandomUpper({ budget, amountRandomUpper, amountRandomLower }) {
  if (amountRandomUpper < 1) {
    throw new Error('过小');
  }
  if (amountRandomUpper < amountRandomLower) {
    throw new Error('过小');
  }
  if (amountRandomUpper > budget) {
    throw new Error('过小');
  }
}

结束

这当中还是存在很多问题,有什么好的建议希望可以指出

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
犀利的js 函数集合
Jun 11 Javascript
javascript动态加载实现方法一
Aug 22 Javascript
基于JavaScript实现 网页切出 网站title变化代码
Apr 03 Javascript
浅谈JavaScript的内置对象和浏览器对象
Jun 03 Javascript
javascript运算符——逻辑运算符全面解析
Jun 27 Javascript
带你快速理解javascript中的事件模型
Aug 14 Javascript
js使用xml数据载体实现城市省份二级联动效果
Nov 08 Javascript
vue axios post发送复杂对象问题
Jun 04 Javascript
JS中的算法与数据结构之集合(Set)实例详解
Aug 20 Javascript
在Vue.js中使用TypeScript的方法
Mar 19 Javascript
React Hook用法示例详解(6个常见hook)
Apr 28 Javascript
JS前端使用canvas实现物体的点选示例
Aug 05 Javascript
微信小程序之蓝牙的链接
Sep 26 #Javascript
jQuery EasyUI Layout实现tabs标签的实例
Sep 26 #jQuery
jQuery EasyUI开发技巧总结
Sep 26 #jQuery
jQuery 开发之EasyUI 添加数据的实例
Sep 26 #jQuery
微信小程序中post方法与get方法的封装
Sep 26 #Javascript
javascript 产生随机数的几种方法总结
Sep 26 #Javascript
Three.js实现浏览器变动时进行自适应的方法
Sep 26 #Javascript
You might like
3种平台下安装php4经验点滴
2006/10/09 PHP
php的XML文件解释类应用实例
2014/09/22 PHP
ThinkPHP使用Smarty第三方插件方法小结
2016/03/19 PHP
PHP中strpos、strstr和stripos、stristr函数分析
2016/06/11 PHP
PHP常用字符串函数用法实例总结
2020/06/04 PHP
datePicker——日期选择控件(with jquery)
2007/02/20 Javascript
js监听输入框值的即时变化onpropertychange、oninput
2011/07/13 Javascript
得到jQuery detach()后节点中的某个值实现代码
2013/02/05 Javascript
js获得地址栏?问号后参数的方法
2013/08/08 Javascript
jQuery仿Flash上下翻动的中英文导航菜单实例
2015/03/10 Javascript
WordPress中利用AJAX异步获取评论用户头像的方法
2016/01/08 Javascript
如何写好你的JavaScript【推荐】
2017/03/02 Javascript
基于AGS JS开发自定义贴图图层
2017/03/31 Javascript
JavaScript之面向对象_动力节点Java学院整理
2017/06/29 Javascript
JS滚动到指定位置导航栏固定顶部
2017/07/03 Javascript
Vue添加请求拦截器及vue-resource 拦截器使用
2017/11/23 Javascript
微信小程序静默登录的实现代码
2020/01/08 Javascript
[01:03]DOTA2新的征程 你的脚印值得踏上
2014/08/13 DOTA
基于Python的身份证号码自动生成程序
2014/08/15 Python
Python中if elif else及缩进的使用简述
2018/05/31 Python
Python for循环与range函数的使用详解
2019/03/23 Python
Python制作微信好友背景墙教程(附完整代码)
2019/07/17 Python
python爬取百度贴吧前1000页内容(requests库面向对象思想实现)
2019/08/10 Python
Pycharm安装并配置jupyter notebook的实现
2020/05/18 Python
html5简介_动力节点Java学院整理
2017/07/07 HTML / CSS
俄罗斯和世界各地的酒店预订:Hotels.com俄罗斯
2016/08/19 全球购物
瑞典在互联网上最大的宠物商店:Animail
2020/10/31 全球购物
马来西亚在线健康商店:Medipal Malaysia
2020/04/13 全球购物
会计系毕业个人自荐信格式
2013/09/23 职场文书
国际经济贸易专业推荐信
2013/11/06 职场文书
大专毕业生自我鉴定范文(2篇)
2014/09/27 职场文书
卖房授权委托书样本
2014/10/05 职场文书
离婚财产分配协议书
2014/10/21 职场文书
四川省传达学习贯彻党的群众路线教育实践活动总结大会精神新闻稿
2014/10/26 职场文书
2015年度内部审计工作总结
2015/05/20 职场文书
领导莅临指导欢迎词
2015/09/30 职场文书