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中使用ActiveXObject操作本地文件夹的方法
Mar 28 Javascript
jQuery实现复选框全选/取消全选/反选及获得选择的值
Jun 12 Javascript
jquery和css3实现的炫酷时尚的菜单导航
Sep 01 Javascript
JS实现网页滚动条感应鼠标变色的方法
Feb 26 Javascript
使用基于Node.js的构建工具Grunt来发布ASP.NET MVC项目
Feb 15 Javascript
微信小程序  网络请求API详解
Oct 25 Javascript
JavaScript中定时控制Throttle、Debounce和Immediate详解
Nov 17 Javascript
JS中parseInt()和map()用法分析
Dec 16 Javascript
javascript history对象详解
Feb 09 Javascript
JS设计模式之访问者模式定义与用法分析
Feb 05 Javascript
Vue对象赋值视图不更新问题及解决方法
Jun 03 Javascript
微信小程序防止多次点击跳转(函数节流)
Sep 19 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下通过伪造http头破解防盗链的代码
2010/07/03 PHP
如何使用php绘制在图片上的正余弦曲线
2013/06/08 PHP
PHP资源管理框架Assetic简介
2014/06/12 PHP
Zend Framework教程之连接数据库并执行增删查的方法(附demo源码下载)
2016/03/21 PHP
Laravel5.4简单实现app接口Api Token认证方法
2019/08/29 PHP
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
2020/04/20 PHP
jQuery 连续列表实现代码
2009/12/21 Javascript
jquery.boxy插件的iframe扩展代码
2010/07/02 Javascript
实例代码详解javascript实现窗口抖动及qq窗口抖动
2016/01/04 Javascript
Centos7 中 Node.js安装简单方法
2016/11/02 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图和饼图的组合图效果示例【附demo源码下载】
2017/03/09 Javascript
vue深入解析之render function code详解
2017/07/18 Javascript
RequireJS用法简单示例
2018/08/20 Javascript
js实现淘宝浏览商品放大镜功能
2020/10/28 Javascript
vue data有值,但是页面{{}} 取不到值的解决
2020/11/09 Javascript
Python的另外几种语言实现
2015/01/29 Python
python3中类的继承以及self和super的区别详解
2019/06/26 Python
python Elasticsearch索引建立和数据的上传详解
2019/08/04 Python
对Django 中request.get和request.post的区别详解
2019/08/12 Python
python3 pathlib库Path类方法总结
2019/12/26 Python
tensorflow 自定义损失函数示例代码
2020/02/05 Python
pytorch torchvision.ImageFolder的用法介绍
2020/02/20 Python
css3.0 图形构成实例练习二
2013/03/19 HTML / CSS
美国网上眼镜商城:Zenni Optical
2016/11/20 全球购物
Aveda美国官网:天然护发产品、洗发水、护发素和沙龙
2016/12/09 全球购物
德国购买健身器材:AsVIVA
2017/08/09 全球购物
泰坦健身器材:Titan Fitness
2018/02/13 全球购物
公司联欢晚会主持词
2014/03/22 职场文书
学校领导班子四风对照检查材料
2014/09/27 职场文书
个人买房协议书范本
2014/10/06 职场文书
工程承包协议书
2014/10/20 职场文书
售后服务承诺函格式
2015/01/21 职场文书
学校教代会开幕词
2016/03/04 职场文书
创业计划书之DIY自助厨房
2019/09/06 职场文书
python xlwt模块的使用解析
2021/04/13 Python
HTML5基础学习之文本标签控制
2022/03/25 HTML / CSS