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 相关文章推荐
ie和firefox不兼容的解决方法集合
Apr 28 Javascript
学习ExtJS Column布局
Oct 08 Javascript
Javascript将string类型转换int类型
Dec 09 Javascript
javascript获取元素偏移量的方法有哪些
Jun 24 Javascript
jquery实现邮箱自动填充提示功能
Nov 17 Javascript
在AngularJS框架中处理数据建模的方式解析
Mar 05 Javascript
js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码
May 13 Javascript
如何快速解决JS或Jquery ajax异步跨域的问题
Jan 08 jQuery
七行JSON代码把你的网站变成移动应用过程详解
Jul 09 Javascript
JavaScript获取某一天所在的星期
Sep 05 Javascript
在pycharm中开发vue的方法步骤
Mar 04 Javascript
js面向对象封装级联下拉菜单列表的实现步骤
Feb 08 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
德生PL450的电路分析和低放电路的改进办法
2021/03/02 无线电
探讨:array2xml和xml2array以及xml与array的互相转化
2013/06/24 PHP
解析在PHP中使用mysqli扩展库对mysql的操作
2013/07/03 PHP
PHP中session变量的销毁
2014/02/27 PHP
Laravel实现autoload方法详解
2017/05/07 PHP
php使用yield对性能提升的测试实例分析
2019/09/19 PHP
PHP获取真实IP及IP模拟方法解析
2020/11/24 PHP
Javascript类定义语法,私有成员、受保护成员、静态成员等介绍
2011/12/08 Javascript
基于JQuery实现滚动到页面底端时自动加载更多信息
2014/01/31 Javascript
JavaScript 对象深入学习总结(经典)
2015/09/29 Javascript
jQuery实现滚动鼠标放大缩小图片的方法(附demo源码下载)
2016/03/05 Javascript
ECHO.js 纯javascript轻量级延迟加载的实例代码
2016/05/24 Javascript
js调用父框架函数与弹窗调用父页面函数的简单方法
2016/11/01 Javascript
Vue 父子组件、组件间通信
2017/03/08 Javascript
JS控制鼠标拒绝点击某一按钮的实例
2017/12/29 Javascript
jquery制作的移动端购物车效果完整示例
2020/02/24 jQuery
微信小程序实现录制、试听、上传音频功能(带波形图)
2020/02/27 Javascript
js回到页面指定位置的三种方式
2020/12/17 Javascript
Python的Django框架可适配的各种数据库介绍
2015/07/15 Python
Python解决N阶台阶走法问题的方法分析
2017/12/28 Python
基于Python中numpy数组的合并实例讲解
2018/04/04 Python
Python+OpenCV图片局部区域像素值处理详解
2019/01/23 Python
使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法
2019/09/06 Python
Python简易计算器制作方法代码详解
2019/10/31 Python
pandas-resample按时间聚合实例
2019/12/27 Python
6行Python代码实现进度条效果(Progress、tqdm、alive-progress​​​​​​​和PySimpleGUI库)
2020/01/06 Python
K最近邻算法(KNN)---sklearn+python实现方式
2020/02/24 Python
Python实现的北京积分落户数据分析示例
2020/03/27 Python
使用CSS3创建动态菜单效果
2015/07/10 HTML / CSS
CSS3 画基本图形,圆形、椭圆形、三角形等
2016/09/20 HTML / CSS
美国知名的在线旅游服务网站:Priceline
2016/07/23 全球购物
俄罗斯汽车零件和配件在线商店:CarvilleShop
2019/11/29 全球购物
房地产广告词大全
2014/03/19 职场文书
2019自荐信范文集锦!
2019/07/03 职场文书
Python 机器学习工具包SKlearn的安装与使用
2021/05/14 Python
MySQL数据库表约束讲解
2022/06/21 MySQL