使用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 相关文章推荐
js类中获取外部函数名的方法与代码
Sep 12 Javascript
extjs grid设置某列背景颜色和字体颜色的实现方法
Sep 06 Javascript
各种常用的JS函数整理
Oct 25 Javascript
javascript获取url上某个参数的方法
Nov 08 Javascript
5个书写JavaScript代码的坏习惯,看看你中枪了没?
Nov 06 Javascript
JavaScript版的TwoQueues缓存模型
Dec 29 Javascript
基于Bootstrap里面的Button dropdown打造自定义select
May 30 Javascript
Bootstrap前端开发案例一
Jun 17 Javascript
微信小程序 animation API详解及实例代码
Oct 08 Javascript
AngularJS中transclude用法详解
Nov 03 Javascript
JavaScript 中对象的深拷贝
Dec 04 Javascript
微信小程序 picker 组件详解及简单实例
Jan 10 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中通过curl检测页面是否被百度收录
2013/09/27 PHP
Kibo 用于处理键盘事件的Javascript工具库
2011/10/28 Javascript
判断滚动条到底部的JS代码
2013/11/04 Javascript
教你如何使用firebug调试功能了解javascript闭包和this
2015/03/04 Javascript
详解Bootstrap按钮
2016/01/04 Javascript
js实现百度搜索提示框
2017/02/05 Javascript
原生js简单实现放大镜特效
2017/05/16 Javascript
微信小程序异步API为Promise简化异步编程的操作方法
2018/08/14 Javascript
JS使用Dijkstra算法求解最短路径
2019/01/17 Javascript
JavaScript碎片—函数闭包(模拟面向对象)
2019/03/13 Javascript
vue实现可视化可拖放的自定义表单的示例代码
2019/03/20 Javascript
JS获取表格视图所选行号的ids过程解析
2020/02/21 Javascript
小程序双头slider选择器的实现示例
2020/03/31 Javascript
JS倒计时两种实现方式代码实例
2020/07/27 Javascript
Vue中keep-alive组件的深入理解
2020/08/23 Javascript
JS异步宏队列微队列原理详解
2020/09/09 Javascript
[48:30]LGD vs infamous Supermajor小组赛D组 BO3 第一场 6.3
2018/06/04 DOTA
在Python中操作时间之mktime()方法的使用教程
2015/05/22 Python
Windows下使Python2.x版本的解释器与3.x共存的方法
2015/10/25 Python
分享Python字符串关键点
2015/12/13 Python
Python程序中用csv模块来操作csv文件的基本使用教程
2016/03/03 Python
pandas 条件搜索返回列表的方法
2018/10/30 Python
python3读取图片并灰度化图片的四种方法(OpenCV、PIL.Image、TensorFlow方法)总结
2019/07/04 Python
Python实现大数据收集至excel的思路详解
2020/01/03 Python
python 解压、复制、删除 文件的实例代码
2020/02/26 Python
Python任务自动化工具tox使用教程
2020/03/17 Python
基于python实现FTP文件上传与下载操作(ftp&sftp协议)
2020/04/01 Python
PythonPC客户端自动化实现原理(pywinauto)
2020/05/28 Python
python+django+selenium搭建简易自动化测试
2020/08/19 Python
利用CSS3的transition属性实现滑动效果
2015/08/05 HTML / CSS
html5/css3响应式页面开发总结
2018/10/16 HTML / CSS
西班牙香水和化妆品网上商店:Douglas
2017/10/29 全球购物
鞋类设计与工艺专业销售求职信
2013/11/01 职场文书
小学生学雷锋演讲稿
2014/04/25 职场文书
三分钟自我介绍演讲稿
2014/08/21 职场文书
银行领导班子四风对照检查材料
2014/09/27 职场文书