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 放大镜效果js组件 qsoft.PopBigImage.v0.35 加入了chrome支持
Apr 07 Javascript
JavaScript 核心参考教程 内置对象
Oct 13 Javascript
Extjs中通过Tree加载右侧TabPanel具体实现
May 05 Javascript
JavaScript访问字符串中单个字符的两种方法
Jul 03 Javascript
自己动手写的javascript前端等待控件
Oct 30 Javascript
Javascript获取统一管理的提示语(message)
Feb 03 Javascript
AngularJS ng-mousedown 指令
Aug 02 Javascript
利用JS提交表单的几种方法和验证(必看篇)
Sep 17 Javascript
浅谈jQuery的bind和unbind事件(绑定和解绑事件)
Mar 02 Javascript
详解微信小程序input标签正则初体验
Aug 18 Javascript
小程序:授权、登录、session_key、unionId的详解
May 15 Javascript
vue-router 路由传参用法实例分析
Mar 06 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
PHP+DBM的同学录程序(5)
2006/10/09 PHP
盘点PHP和ASP.NET的10大对比!
2015/12/24 PHP
php获取小程序码的实现代码(B类接口)
2020/06/13 PHP
百度留言本js 大家可以参考下
2009/10/13 Javascript
Javascript学习笔记-详解in运算符
2011/09/13 Javascript
jquery自定义属性(类型/属性值)
2013/05/21 Javascript
如何编写高质量JS代码(续)
2015/02/25 Javascript
JS+CSS实现的日本门户网站经典选项卡导航效果
2015/09/27 Javascript
JavaScript程序中的流程控制语句用法总结
2016/05/23 Javascript
js判断数组key是否存在(不用循环)的简单实例
2016/08/03 Javascript
响应式表格之固定表头的简单实现
2016/08/26 Javascript
基于canvas的二维码邀请函生成插件
2017/02/14 Javascript
bootstrap datetimepicker 日期插件在火狐下出现一条报错信息的原因分析及解决办法
2017/03/08 Javascript
vue踩坑记录之数组定义和赋值问题
2019/03/20 Javascript
javascript使用substring实现的展开与收缩文字功能示例
2019/06/17 Javascript
微信小程序点击列表跳转到对应详情页过程解析
2019/09/26 Javascript
three.js 制作动态二维码的示例代码
2020/07/31 Javascript
[48:32]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python enumerate函数的使用方法总结
2017/11/15 Python
python中的迭代和可迭代对象代码示例
2017/12/27 Python
python实现贪吃蛇游戏
2020/03/21 Python
利用pandas合并多个excel的方法示例
2019/10/10 Python
python中sklearn的pipeline模块实例详解
2020/05/21 Python
Python xmltodict模块安装及代码实例
2020/10/05 Python
opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器
2020/11/13 Python
德国圣伯纳德草药屋:Kräuterhaus Sanct Bernhard(有中文站)
2018/08/05 全球购物
以工厂直接定价的传奇性能:Ben Hogan Golf
2019/01/04 全球购物
DNA测试:Orig3n
2019/03/01 全球购物
哪些情况下不应该使用索引
2015/07/20 面试题
汽车机修工岗位职责
2014/03/06 职场文书
调解协议书
2014/04/16 职场文书
护理医院见习报告
2014/11/03 职场文书
2014年车间主任工作总结
2014/12/10 职场文书
2014年司法局工作总结
2014/12/11 职场文书
2019七夕节祝福语36句,快来收藏吧
2019/08/06 职场文书
Nginx开源可视化配置工具NginxConfig使用教程
2022/06/21 Servers