使用mixins实现elementUI表单全局验证的解决方法


Posted in Javascript onApril 02, 2019

使用ElementUi搭建框架的时候,大家应该都有考虑过怎么做全局验证,毕竟复制粘贴什么的是最烦了,这里分享下个人的解决方法。

验证规则
分析规则

一般验证规则,主要是是否必填,不为空,以及参数类型的验证。

基于这个条件,我们开始找找思路, 单个字段的验证是这样的:

name: {
 required: 是否必填,
 validator: 自定义规则,
 message: 失败提示消息(非自定义时触发),
 trigger: 触发方式
}

循环实现

固定的规则。当一个东西固定之后,那必然是可以重复使用的,并且可以快速生成,我们可以用循环来实现它。

但是用循环来实现,我们则需要一个数据规则。

定义数据规则

分析下需要的字段,大概就是以下几种,其他的可以根据自身的需求去增加:

  • 验证的字段名 label
  • 验证的值 value
  • 验证的类型 type
  • 是否必填 required
  • 自定义规则 rules

那最终我们得到的是这样一个字段配置列表:

fieldList: [
   {label: '账号', value: 'account', type: 'input', required: true},
   {label: '密码', value: 'password', type: 'password', required: true},
   {label: '昵称', value: 'name', type: 'input', required: true},
   {label: '性别', value: 'sex', type: 'select', list: 'sexList', required: true},
   {label: '头像', value: 'avatar', type: 'input'},
   {label: '手机号码', value: 'phone', type: 'input'},
   {label: '微信', value: 'wechat', type: 'input'},
   {label: 'QQ', value: 'qq', type: 'input'},
   {label: '邮箱', value: 'email', type: 'input'},
   {label: '状态', value: 'status', type: 'select', list: 'statusList', required: true}
  ]

form完整的字段配置建议参考:

// 表单相关
  formInfo: {
  ref: null,
  data: {
   id: '', // *唯一ID
   account: '', // *用户账号
   password: '', // *用户密码
   name: '', // *用户昵称
   type: 2, // *用户类型: 0: 手机注册 1: 论坛注册 2: 管理平台添加
   sex: 0, // *性别: 0:男 1:女
   avatar: '', // 头像
   phone: '', // 手机号码
   wechat: '', // 微信
   qq: '', // qq
   email: '', // 邮箱
   status: 1 // *状态: 0:停用,1:启用(默认为1)',
   // create_user: '', // 创建人
   // create_time: '', // 创建时间
   // update_user: '', // 修改人
   // update_time: '' // 修改时间
  },
  fieldList: [
   {label: '账号', value: 'account', type: 'input', required: true},
   {label: '密码', value: 'password', type: 'password', required: true},
   {label: '昵称', value: 'name', type: 'input', required: true},
   {label: '性别', value: 'sex', type: 'select', list: 'sexList', required: true},
   {label: '头像', value: 'avatar', type: 'input'},
   {label: '手机号码', value: 'phone', type: 'input'},
   {label: '微信', value: 'wechat', type: 'input'},
   {label: 'QQ', value: 'qq', type: 'input'},
   {label: '邮箱', value: 'email', type: 'input'},
   {label: '状态', value: 'status', type: 'select', list: 'statusList', required: true}
  ],
  rules: {},
  labelWidth: '120px'
  }

实现验证方法

  • 循环字段列表,根据type判断是提示选择不能为空,还是输入不能为空
  • 如果字段必填,则根据是否有自定义验证去生成验证规则
  • 字段非必填,有自定义规则生成验证
// 初始化验证数据
 _initRules (formInfo) {
  const obj = {},
  fieldList = formInfo.fieldList
  // 循环字段列表
  for (let item of fieldList) {
  let type = item.type === 'select' ? '选择' : '输入'

  if (item.required) {
   if (item.rules) {
   obj[item.value] = {
    required: item.required,
    validator: item.rules,
    trigger: 'blur'
   }
   } else {
   obj[item.value] = {
    required: item.required,
    message: '请' + type + item.label,
    trigger: 'blur'
   }
   }
  } else if (item.rules) {
   obj[item.value] = {
   validator: item.rules,
   trigger: 'blur'
   }
  }
  }
  formInfo.rules = obj
 }

怎么配置到全局

  • 通过mixin配置,然后在页面中使用(个人使用的是mixin)
  • 配置为全局方法在页面中调用
  • 挂在到vue实例上,通过this即可访问

最后

在项目的系统管理模块中可以看到示例代码:

项目地址

项目代码地址

总结

以上所述是小编给大家介绍的使用mixins实现elementUI表单的全局验证的解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
bcastr2.0 通用的图片浏览器
Nov 22 Javascript
jQuery textarea的长度进行验证
May 06 Javascript
jquery 无限级联菜单案例分享
Mar 26 Javascript
Jquery AJAX POST与GET之间的区别
Nov 14 Javascript
AngularJS入门教程之Hello World!
Dec 06 Javascript
JavaScript中用getDate()方法返回指定日期的教程
Jun 09 Javascript
jQuery+AJAX实现无刷新下拉加载更多
Jul 03 Javascript
vue+vuecli+webpack中使用mockjs模拟后端数据的示例
Oct 24 Javascript
常用的9个JavaScript图表库详解
Dec 19 Javascript
JavaScript中变量、指针和引用功能与操作示例
Aug 04 Javascript
微信小程序swiper禁止用户手动滑动代码实例
Aug 23 Javascript
js实现模拟购物商城案例
May 18 Javascript
移动端自适应flexible.js的使用方法(不用三大框架,仅写一个单html页面使用)推荐
Apr 02 #Javascript
基于vue实现web端超大数据量表格的卡顿解决
Apr 02 #Javascript
基于AngularJS拖拽插件ngDraggable.js实现拖拽排序功能
Apr 02 #Javascript
详解vue后台系统登录态管理
Apr 02 #Javascript
微信小程序实现人脸识别登陆的示例代码
Apr 02 #Javascript
Angular7中创建组件/自定义指令/管道的方法实例详解
Apr 02 #Javascript
Node.js中package.json中库的版本号(~和^)
Apr 02 #Javascript
You might like
PHP中实现接收多个name相同但Value不相同表单数据实例
2015/02/03 PHP
在Debian系统下配置LNMP的教程
2015/07/09 PHP
详解PHP中的外观模式facade pattern
2018/02/05 PHP
js 方法实现返回多个数据的代码
2009/04/30 Javascript
javascript 图片上一张下一张链接效果代码
2010/03/12 Javascript
原生javascript实现图片按钮切换
2015/01/12 Javascript
JS+CSS相对定位实现的下拉菜单
2015/10/06 Javascript
jQuery实现简单的文件上传进度条效果
2020/03/26 Javascript
JS实现密码框根据焦点的获取与失去控制文字的消失与显示效果
2015/11/26 Javascript
node+express+ejs使用模版引擎做的一个示例demo
2017/09/18 Javascript
详解vue-cli项目中用json-sever搭建mock服务器
2017/11/02 Javascript
switchery按钮的使用方法
2017/12/18 Javascript
JavaScript实现区块链
2018/03/14 Javascript
深入理解Vue 的钩子函数
2018/09/05 Javascript
JavaScript代码调试方法实例小结
2019/01/05 Javascript
微信小程序点击顶部导航栏切换样式代码实例
2019/11/12 Javascript
JS this关键字在ajax中使用出现问题解决方案
2020/07/17 Javascript
OpenLayers3实现地图鹰眼以及地图比例尺的添加
2020/09/25 Javascript
python调用shell的方法
2013/11/20 Python
python如何实现反向迭代
2018/03/20 Python
python一行sql太长折成多行并且有多个参数的方法
2018/07/19 Python
python for循环输入一个矩阵的实例
2018/11/14 Python
Python多进程方式抓取基金网站内容的方法分析
2019/06/03 Python
浅析Python3中的对象垃圾收集机制
2019/06/06 Python
Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)
2019/12/04 Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
2020/04/27 Python
python 图像插值 最近邻、双线性、双三次实例
2020/07/05 Python
python实现测试工具(二)——简单的ui测试工具
2020/10/19 Python
python 用opencv实现图像修复和图像金字塔
2020/11/27 Python
HTML5 canvas画图并保存成图片的jcanvas插件
2014/01/17 HTML / CSS
曼城官方网上商店:Manchester City
2019/09/10 全球购物
LACOSTE波兰官网:Polo衫、服装和鞋类
2020/09/29 全球购物
制药工程专业毕业生推荐信
2013/12/24 职场文书
实习生的自我评价
2014/01/08 职场文书
导游词格式
2015/02/13 职场文书
2015军训通讯稿大全
2015/07/18 职场文书