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 相关文章推荐
从JavaScript 到 JQuery (1)学习小结
Feb 12 Javascript
jquery图片放大镜功能的实例代码
Mar 26 Javascript
创建自己的jquery表格插件
Nov 25 Javascript
Select2.js下拉框使用小结
Oct 24 Javascript
js利用for in循环获取 一个对象的所有属性以及值的实例
Mar 30 Javascript
Vue2.x中的父组件传递数据至子组件的方法
May 01 Javascript
深入理解Angular中的依赖注入
Jun 26 Javascript
使用react实现手机号的数据同步显示功能的示例代码
Apr 03 Javascript
JavaScript实现的DOM树遍历方法详解【二叉DOM树、多叉DOM树】
May 07 Javascript
vue 下列表侧滑操作实例代码详解
Jul 24 Javascript
解决vue-cli webpack打包后加载资源的路径问题
Sep 25 Javascript
vue简单练习 桌面时钟的实现代码实例
Sep 19 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
论坛头像随机变换代码
2006/10/09 PHP
php set_magic_quotes_runtime() 函数过时解决方法
2010/07/08 PHP
fleaphp crud操作之findByField函数的使用方法
2011/04/23 PHP
zend框架实现支持sql server的操作方法
2016/12/08 PHP
PHP封装返回Ajax字符串和JSON数组的方法
2017/02/17 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
关于 byval 与 byref 的区别分析总结
2007/10/08 Javascript
extjs fckeditor集成代码
2009/05/10 Javascript
js+xml生成级联下拉框代码
2012/07/24 Javascript
Javascript中的apply()方法浅析
2015/03/15 Javascript
轻松实现js图片预览功能
2016/01/18 Javascript
JS中使用变量保存arguments对象的方法
2016/06/03 Javascript
JS中事件冒泡和事件捕获介绍
2016/12/13 Javascript
JS大坑之19位数的Number型精度丢失问题详解
2019/04/22 Javascript
JS使用正则表达式判断输入框失去焦点事件
2019/10/16 Javascript
如何基于javascript实现贪吃蛇游戏
2020/02/09 Javascript
google广告之另类js调用实现代码
2020/08/22 Javascript
[39:32]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第二场
2014/05/23 DOTA
Python学习小技巧之列表项的排序
2017/05/20 Python
Python中应该使用%还是format来格式化字符串
2018/09/25 Python
python从子线程中获得返回值的方法
2019/01/30 Python
德国最大的网上鞋店之一:Schuhe24.de
2017/06/10 全球购物
澳洲女装时尚在线:Blue Bungalow
2018/05/05 全球购物
Chain Reaction Cycles俄罗斯:世界上最大的在线自行车商店
2019/08/27 全球购物
php优化查询foreach代码实例讲解
2021/03/24 PHP
会计专业毕业生自我评价
2013/09/25 职场文书
大学毕业的自我鉴定
2013/10/08 职场文书
大学生的自我鉴定范文
2014/01/21 职场文书
秋季红领巾广播稿
2014/01/27 职场文书
社区端午节活动方案
2014/01/28 职场文书
学校食堂食品安全责任书
2014/07/28 职场文书
合作意向书
2014/07/30 职场文书
2015年元旦联欢晚会活动总结
2014/11/28 职场文书
国庆节新闻稿
2015/07/17 职场文书
Python中的变量与常量
2021/11/11 Python
redis数据一致性的实现示例
2022/03/18 Redis