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 相关文章推荐
HTML-CSS群中单选引发的“事件”
Mar 05 Javascript
JavaScript ECMA-262-3 深入解析.第三章.this
Sep 28 Javascript
Jquery操作下拉框(DropDownList)实现取值赋值
Aug 13 Javascript
js原型链与继承解析(初体验)
May 09 Javascript
针对BootStrap中tabs控件的美化和完善(推荐)
Jul 06 Javascript
jQuery实现对象转为url参数的方法
Jan 11 Javascript
js实现打地鼠小游戏
Feb 13 Javascript
JavaScript html5利用FileReader实现上传功能
Mar 27 Javascript
JS中type=&quot;button&quot;和type=&quot;submit&quot;的区别
Jul 04 Javascript
Vue的事件响应式进度条组件实例详解
Feb 04 Javascript
在Node.js中将SVG图像转换为PNG,JPEG,TIFF,WEBP和HEIF格式的方法
Aug 22 Javascript
layui表格设计以及数据初始化详解
Oct 26 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
js 动态为textbox添加下拉框数据源的方法
2014/04/24 Javascript
IE中的File域无法清空使用jQuery重设File域
2014/04/24 Javascript
js中实现多态采用和继承类似的方法
2014/08/22 Javascript
JavaScript实现DOM对象选择器
2016/09/24 Javascript
bootstrap datepicker 与bootstrapValidator同时使用时选择日期后无法正常触发校验的解决思路
2016/09/28 Javascript
Bootstrap CSS组件之面包屑导航(breadcrumb)
2016/12/17 Javascript
bootstrap suggest下拉框使用详解
2017/04/10 Javascript
javascript 开发之百度地图使用到的js函数整理
2017/05/19 Javascript
js学习总结_基于数据类型检测的四种方式(必看)
2017/07/04 Javascript
bootstrap table方法之expandRow-collapseRow展开或关闭当前行数据
2020/08/09 Javascript
详解vue.js之props传递参数
2017/12/12 Javascript
layui递归实现动态左侧菜单
2019/07/26 Javascript
JavaScript forEach中return失效问题解决方案
2020/06/01 Javascript
js中实现继承的五种方法
2021/01/25 Javascript
Python深入学习之对象的属性
2014/08/31 Python
python MySQLdb Windows下安装教程及问题解决方法
2015/05/09 Python
Python实现可获取网易页面所有文本信息的网易网络爬虫功能示例
2018/01/15 Python
python实现简单多人聊天室
2018/12/11 Python
树莓派采用socket方式文件传输(python)
2019/06/22 Python
深入了解python中元类的相关知识
2019/08/29 Python
python matplotlib如何给图中的点加标签
2019/11/14 Python
Python 3.8 新功能来一波(大部分人都不知道)
2020/03/11 Python
python+opencv实现移动侦测(帧差法)
2020/03/20 Python
Python爬取某平台短视频的方法
2021/02/08 Python
群胜软件Java笔试题
2012/09/29 面试题
C++面试题目
2013/06/25 面试题
英语专业应届生求职信范文
2013/11/15 职场文书
小学生暑假感言
2014/02/06 职场文书
六查六看自查材料
2014/02/17 职场文书
元旦获奖感言
2014/03/08 职场文书
党的群众路线剖析材料
2014/10/09 职场文书
给学校的建议书400字
2015/09/14 职场文书
远程教育培训心得体会
2016/01/09 职场文书
pygame面向对象的飞行小鸟实现(Flappy bird)
2021/04/01 Python
MySQL分区表管理命令汇总
2022/03/21 MySQL
MySQL实现字段分割一行转多行的示例代码
2022/07/07 MySQL