使用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 相关文章推荐
JavaScript 学习笔记(十六) js事件
Feb 01 Javascript
jQuery EasyUI API 中文文档 - Documentation 文档
Sep 29 Javascript
基于javascript、ajax、memcache和PHP实现的简易在线聊天室
Feb 03 Javascript
JavaScript实现给按钮加上双重动作的方法
Aug 14 Javascript
JS获取浮动(float)元素的style.left值为空的快速解决办法
Feb 19 Javascript
vue + socket.io实现一个简易聊天室示例代码
Mar 06 Javascript
ES6入门教程之Class和Module详解
May 17 Javascript
基于JavaScript实现数码时钟效果
Mar 30 Javascript
AngularJS中controller控制器继承的使用方法
Nov 03 Javascript
微信小程序实现点击按钮修改文字大小功能【附demo源码下载】
Dec 06 Javascript
初学node.js中实现删除用户路由
May 27 Javascript
js键盘事件实现人物的行走
Jan 17 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
松下Panasonic RF-B65电路分析
2021/03/02 无线电
PHP __autoload函数(自动载入类文件)的使用方法
2012/02/04 PHP
PHP stream_context_create()函数的使用示例
2015/05/12 PHP
Javascript 文件夹选择框的两种解决方案
2009/07/01 Javascript
关于 文本框默认值 的操作js代码
2012/01/12 Javascript
JavaScript等比例缩放图片控制超出范围的图片
2013/08/06 Javascript
Node.js文件操作详解
2014/08/16 Javascript
javascript实现节点(div)名称编辑
2014/12/17 Javascript
JavaScript使用shift方法移除素组第一个元素实例分析
2015/04/06 Javascript
JS实现的鼠标跟随代码(卡通手型点击效果)
2015/10/26 Javascript
JavaScript基础教程——入门必看篇
2016/05/20 Javascript
AngularJS 中的事件详解
2016/07/28 Javascript
通过button将form表单的数据提交到action层的实例
2017/09/08 Javascript
vue使用axios实现文件上传进度的实时更新详解
2017/12/20 Javascript
支付宝小程序tabbar底部导航
2018/11/06 Javascript
微信小程序下拉刷新PullDownRefresh的使用方法
2018/11/29 Javascript
js打开word文档预览操作示例【不是下载】
2019/05/23 Javascript
你了解vue3.0响应式数据怎么实现吗
2019/06/07 Javascript
Vue 实现从小到大的横向滑动效果详解
2019/10/16 Javascript
javascript History对象原理解析
2020/02/17 Javascript
JS如何调用WebAssembly编译出来的.wasm文件
2020/11/05 Javascript
Python处理RSS、ATOM模块FEEDPARSER介绍
2015/02/18 Python
Python常用库推荐
2016/12/04 Python
python中matplotlib的颜色及线条控制的示例
2018/03/16 Python
PyCharm代码提示忽略大小写设置方法
2018/10/28 Python
Python 确定多项式拟合/回归的阶数实例
2018/12/29 Python
Python3操作读写CSV文件使用包过程解析
2020/04/10 Python
使用Django搭建网站实现商品分页功能
2020/05/22 Python
法国家具及室内配件店:home24
2017/01/21 全球购物
意大利灯具购物网站:Lampade.it
2018/10/18 全球购物
美国折扣地毯销售网站:Rugs.com
2020/03/27 全球购物
绿色学校实施方案
2014/03/31 职场文书
公司离职证明范本(5篇)
2014/09/17 职场文书
风之谷观后感
2015/06/11 职场文书
欠条范文
2015/07/03 职场文书
素质教育培训心得体会
2016/01/19 职场文书