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 相关文章推荐
ASP.NET jQuery 实例6 (实现CheckBoxList成员全选或全取消)
Jan 13 Javascript
《JavaScript高级程序设计》阅读笔记(一) ECMAScript基础
Feb 27 Javascript
利用js实现遮罩以及弹出可移动登录窗口
Jul 08 Javascript
jquery 获取 outerHtml 包含当前节点本身的代码
Oct 30 Javascript
js鼠标点击图片实现随机变换图片的方法
Feb 16 Javascript
简介JavaScript中的push()方法的使用
Jun 09 Javascript
JS实现漂亮的淡蓝色滑动门效果代码
Sep 23 Javascript
前端实现文件的断点续传(前端文件提交+后端PHP文件接收)
Nov 04 Javascript
vuex 使用文档小结篇
Jan 11 Javascript
微信小程序模版渲染详解
Jan 26 Javascript
vue构建动态表单的方法示例
Sep 22 Javascript
JS异步宏队列与微队列原理区别详解
Jul 02 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动态添加url查询参数的方法
2015/04/14 PHP
Yii开启片段缓存的方法
2016/03/28 PHP
JavaScript 异步调用框架 (Part 5 - 链式实现)
2009/08/04 Javascript
JS中confirm,alert,prompt函数区别分析
2011/01/17 Javascript
最佳6款用于移动网站开发的jQuery 图片滑块插件小结
2012/07/20 Javascript
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
js如何实现点击标签文字,文字在文本框出现
2015/08/05 Javascript
jQuery unbind()方法实例详解
2016/01/19 Javascript
JavaScript队列、优先队列与循环队列
2016/11/14 Javascript
详解JavaScript数组过滤相同元素的5种方法
2017/05/23 Javascript
JavaScript常用数组操作方法,包含ES6方法
2020/05/10 Javascript
JS面试题大坑之隐式类型转换实例代码
2018/10/14 Javascript
js中let能否完全替代IIFE
2019/06/15 Javascript
Element 默认勾选表格 toggleRowSelection的实现
2019/09/04 Javascript
详解webpack打包vue项目之后生成的dist文件该怎么启动运行
2019/09/06 Javascript
Vue项目中使用flow做类型检测的方法
2020/03/18 Javascript
vue+springboot+element+vue-resource实现文件上传教程
2020/10/21 Javascript
Js实现粘贴上传图片的原理及示例
2020/12/09 Javascript
python3 shelve模块的详解
2017/07/08 Python
Python使用正则表达式过滤或替换HTML标签的方法详解
2017/09/25 Python
python 命令行传入参数实现解析
2019/08/30 Python
Python使用matplotlib实现交换式图形显示功能示例
2019/09/06 Python
python/Matplotlib绘制复变函数图像教程
2019/11/21 Python
python接口自动化如何封装获取常量的类
2019/12/24 Python
Linux下升级安装python3.8并配置pip及yum的教程
2020/01/02 Python
Python字符编码转码之GBK,UTF8互转
2020/02/09 Python
Python轻量级web框架bottle使用方法解析
2020/06/13 Python
纯HTML5+CSS3制作生日蛋糕(代码易懂)
2016/11/16 HTML / CSS
Jo Malone美国官网:祖玛珑香水
2017/03/27 全球购物
Goodee官方商店:迷你投影仪
2021/03/15 全球购物
科级干部考察材料
2014/02/15 职场文书
师范大学生求职信
2014/06/13 职场文书
银行求职自荐信范文
2015/03/04 职场文书
大学生党课感想
2015/08/11 职场文书
python 统计代码耗时的几种方法分享
2021/04/02 Python
教你怎么用Python selenium操作浏览器对象的基础API
2021/06/23 Python