使用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 相关文章推荐
为数据添加append,remove功能
Oct 03 Javascript
服务器安全设置的几个注册表设置
Jul 28 Javascript
效率高的Javscript字符串替换函数的benchmark
Aug 02 Javascript
Prototype 学习 Prototype对象
Jul 12 Javascript
jQuery关键词说明插件cluetip使用指南
Apr 21 Javascript
基于JS实现的随机数字抽签实例
Dec 08 Javascript
JS实现一次性弹窗的方法【刷新后不弹出】
Dec 26 Javascript
微信禁止下拉查看URL的处理方法
Sep 28 Javascript
基于VUE.JS的移动端框架Mint UI的使用
Oct 11 Javascript
通过vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题
Apr 08 Javascript
通过实例了解Javascript柯里化流程
Mar 03 Javascript
JS实现页面炫酷的时钟特效示例
Aug 14 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
web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验
2013/06/01 PHP
实例讲解PHP表单验证功能
2019/02/15 PHP
laravel-admin的多级联动方法
2019/09/30 PHP
JavaScript 开发中规范性的一点感想
2009/06/23 Javascript
JSQL SQLProxy 的 php 版本代码
2010/05/05 Javascript
基于jQuery的遍历同id元素 并响应事件的代码
2012/06/14 Javascript
ExtJS下 Ext.Direct加载和提交过程排错小结
2013/04/02 Javascript
javascript表单验证使用示例(javascript验证邮箱)
2014/01/07 Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
2014/04/10 Javascript
如何正确使用Nodejs 的 c++ module 链接到 OpenSSL
2014/08/03 NodeJs
js实现的类似于asp数据字典的数据类型代码实例
2014/09/03 Javascript
JS深度拷贝Object Array实例分析
2016/03/31 Javascript
浅谈JavaScript的push(),pop(),concat()方法
2016/06/03 Javascript
JS判断来路是否是百度等搜索索引进行弹窗或自动跳转的实现代码
2016/10/09 Javascript
关于js中的鼠标事件总结
2017/07/11 Javascript
vue+axios 前端实现的常用拦截的代码示例
2018/08/23 Javascript
Vue使用NPM方式搭建项目
2018/10/25 Javascript
[01:59]DOTA2首部纪录片《Free to play》预告片
2014/03/12 DOTA
[47:43]Alliance vs KG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
Python的re模块正则表达式操作
2016/05/25 Python
Python实现向服务器请求压缩数据及解压缩数据的方法示例
2017/06/09 Python
Python 创建空的list,以及append用法讲解
2018/05/04 Python
Python多进程与服务器并发原理及用法实例分析
2018/08/21 Python
2019 Python最新面试题及答案16道题
2019/04/11 Python
Python3+Pycharm+PyQt5环境搭建步骤图文详解
2019/05/29 Python
在django admin中添加自定义视图的例子
2019/07/26 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
2019/08/23 Python
Python爬虫分析微博热搜关键词的实现代码
2021/02/22 Python
pytorch 实现L2和L1正则化regularization的操作
2021/03/03 Python
UGG雪地靴德国官网:UGG德国
2016/11/19 全球购物
结构和类有什么异同
2012/07/16 面试题
Java中的异常处理机制的简单原理和应用
2013/04/27 面试题
销售总经理岗位职责
2014/03/15 职场文书
2015社区六五普法工作总结
2015/04/21 职场文书
Python - 10行代码集2000张美女图
2021/05/23 Python
Python读写yaml文件
2022/03/20 Python