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 屏蔽鼠标右键脚本附破解方法
Dec 03 Javascript
基于Jquery制作的幻灯片图集效果打包下载
Feb 12 Javascript
关于js数组去重的问题小结
Jan 24 Javascript
解决bootstrap中modal遇到Esc键无法关闭页面
Mar 09 Javascript
js 求时间差的实现代码
Apr 26 Javascript
JS使用onerror捕获异常示例
Aug 03 Javascript
js改变html的原有内容实现方法
Oct 05 Javascript
快速了解vue-cli 3.0 新特性
Feb 28 Javascript
使用webpack-dev-server处理跨域请求的方法
Apr 18 Javascript
在微信小程序中渲染HTML内容的方法示例
Sep 28 Javascript
vue中利用Promise封装jsonp并调取数据
Jun 18 Javascript
vue使用exif获取图片旋转,压缩的示例代码
Dec 11 Vue.js
微信小程序之蓝牙的链接
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操作mysqli(示例代码)
2013/10/28 PHP
安装ImageMagick出现error while loading shared libraries的解决方法
2014/09/23 PHP
php实现微信公众号无限群发
2015/10/11 PHP
最准确的php截取字符串长度函数
2015/10/29 PHP
php json中文编码为null的解决办法
2016/12/14 PHP
PHP利用Socket获取网站的SSL证书与公钥
2017/06/18 PHP
学习thinkphp5.0验证类使用方法
2017/11/16 PHP
JS 自动安装exe程序
2008/11/30 Javascript
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
2013/03/24 Javascript
jquery自定义下拉列表示例
2014/04/25 Javascript
JavaScript中setUTCMilliseconds()方法的使用详解
2015/06/12 Javascript
使用getBoundingClientRect方法实现简洁的sticky组件的方法
2016/03/22 Javascript
JavaScript中的Object对象学习教程
2016/05/20 Javascript
深入理解Node.js的HTTP模块
2016/10/12 Javascript
浅谈JS中String()与 .toString()的区别
2016/10/20 Javascript
js实现一个猜数字游戏
2017/03/31 Javascript
详解Node.js串行化流程控制
2017/05/04 Javascript
详解Vue.js和layui日期控件冲突问题解决办法
2019/07/25 Javascript
[53:29]完美世界DOTA2联赛循环赛 DM vs Matador BO2第二场 11.04
2020/11/05 DOTA
python原始套接字编程示例分享
2014/02/21 Python
整理Python中的赋值运算符
2015/05/13 Python
Python3实现获取图片文字里中文的方法分析
2018/12/13 Python
python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中
2019/08/24 Python
Python爬虫图片懒加载技术 selenium和PhantomJS解析
2019/09/18 Python
pytorch GAN生成对抗网络实例
2020/01/10 Python
HTML5边玩边学(1)画布实现方法
2010/09/21 HTML / CSS
解析HTML5的存储功能和web SQL的相关操作方法
2016/02/19 HTML / CSS
印尼旅游网站:via
2017/11/12 全球购物
机电专业体育教师求职信
2013/09/21 职场文书
实习生自荐信范文分享
2013/11/27 职场文书
小学感恩教育活动总结
2014/07/07 职场文书
2014党员四风对照检查材料思想汇报
2014/09/17 职场文书
外出听课学习心得体会
2016/01/15 职场文书
创业计划书之青年旅馆
2019/09/23 职场文书
MySQL索引篇之千万级数据实战测试
2021/04/05 MySQL
python编写五子棋游戏
2021/05/25 Python