使用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 获取中文拼音,Select自动匹配字母获取值的代码
Sep 23 Javascript
Jquery iframe内部出滚动条
Feb 11 Javascript
jquery中使用循环下拉菜单示例代码
Sep 24 Javascript
JS+CSS相对定位实现的下拉菜单
Oct 06 Javascript
从零开始学习Node.js系列教程四:多页面实现的数学运算示例
Apr 13 Javascript
Vue中v-for的数据分组实例
Mar 07 Javascript
JS引用传递与值传递的区别与用法分析
Jun 01 Javascript
JavaScript设计模式之观察者模式(发布订阅模式)原理与实现方法示例
Jul 27 Javascript
vue.js中toast用法及使用toast弹框的实例代码
Aug 27 Javascript
如何实现小程序tab栏下划线动画效果
May 18 Javascript
uniapp电商小程序实现订单30分钟倒计时
Nov 01 Javascript
React Hook用法示例详解(6个常见hook)
Apr 28 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 生成静态页面的办法与实现代码详细版
2010/02/15 PHP
php smarty 二级分类代码和模版循环例子
2011/06/01 PHP
PHP处理excel cvs表格的方法实例介绍
2013/05/13 PHP
PHPstorm激活码2020年5月13日亲测有效
2020/09/17 PHP
js写一个字符串转成驼峰的实例
2013/06/21 Javascript
jquery图片放大功能简单实现
2013/08/01 Javascript
自己使用jquery写的一个无缝滚动的插件
2014/04/30 Javascript
jQuery中first()方法用法实例
2015/01/06 Javascript
jQuery Mobile页面返回不需要重新get
2016/04/26 Javascript
老生常谈的跨域处理
2017/01/11 Javascript
vue父子组件的嵌套的示例代码
2017/09/08 Javascript
js 判断一个数字是不是2的n次方幂的实例
2017/11/26 Javascript
JavaScript实现左侧菜单效果
2017/12/14 Javascript
通过js动态创建标签,并设置属性方法
2018/02/24 Javascript
JS实现遍历不规则多维数组的方法
2018/03/21 Javascript
jquery获取元素到屏幕四周可视距离的方法
2018/09/05 jQuery
vue使用swiper实现中间大两边小的轮播图效果
2019/11/24 Javascript
[01:11:46]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第一场 2月23日
2021/03/11 DOTA
Python版的文曲星猜数字游戏代码
2013/09/02 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/26 Python
python中通过selenium简单操作及元素定位知识点总结
2019/09/10 Python
浅析PEP572: 海象运算符
2019/10/15 Python
解决pandas展示数据输出时列名不能对齐的问题
2019/11/18 Python
python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例
2020/02/28 Python
基于Python组装jmx并调用JMeter实现压力测试
2020/11/03 Python
彻底弄明白CSS3的Media Queries(跨平台设计)
2010/07/27 HTML / CSS
检测浏览器是否支持html5视频的代码
2013/03/28 HTML / CSS
一套中级Java程序员笔试题
2015/01/14 面试题
公司财务自我评价分享
2013/12/17 职场文书
优秀员工获奖感言
2014/03/01 职场文书
新闻专业毕业生英文求职信
2014/03/19 职场文书
股权收购意向书
2014/04/01 职场文书
承诺书样本
2014/08/30 职场文书
出国签证在职证明范本
2014/11/24 职场文书
签证扫盲贴,41个常见签证知识,需要的拿走
2019/08/09 职场文书
创业计划书之孕婴生活馆
2019/11/11 职场文书