使用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获取函数名称、函数参数、对象属性名称的代码实例
Apr 12 Javascript
onclick和onblur冲突问题的快速解决方法
Apr 28 Javascript
JS实现输入框提示文字点击时消失效果
Jul 19 Javascript
js 声明数组和向数组中添加对象变量的简单实例
Jul 28 Javascript
最丑的时钟效果!js canvas时钟制作方法
Aug 15 Javascript
前端js实现文件的断点续传 后端PHP文件接收
Oct 14 Javascript
移动端基础事件总结与应用
Jan 12 Javascript
jQuery中on方法使用注意事项详解
Feb 15 Javascript
bootstrap suggest搜索建议插件使用详解
Mar 25 Javascript
深入理解vue.js中的v-if和v-show
Jun 22 Javascript
详解在Vue中有条件地使用CSS类
Sep 30 Javascript
如何理解Vue前后端数据交互与显示
May 10 Vue.js
移动端自适应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 Hex RGB颜色值互换的使用
2013/05/10 PHP
一个简洁的PHP可逆加密函数(分享)
2013/06/06 PHP
Discuz批量替换帖子内容的方法(使用SQL更新数据库)
2014/06/23 PHP
PHP会话处理的10个函数
2015/08/11 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
一个可以增加和删除行的table并可编辑表格中内容
2014/06/16 Javascript
JS实现的4种数字千位符格式化方法分享
2015/03/02 Javascript
javascript实现简易计算器的代码
2016/05/31 Javascript
JS设置CSS样式的方式汇总
2017/01/21 Javascript
从零开始学习Node.js系列教程五:服务器监听方法示例
2017/04/13 Javascript
浅谈jQuery框架Ajax常用选项
2017/07/08 jQuery
用ES6的class模仿Vue写一个双向绑定的示例代码
2018/04/20 Javascript
Node批量爬取头条视频并保存方法
2018/09/20 Javascript
详解vue中使用微信jssdk
2019/04/19 Javascript
浅入深出Vue之自动化路由
2019/08/06 Javascript
js 实现watch监听数据变化的代码
2019/10/13 Javascript
vue之封装多个组件调用同一接口的案例
2020/08/11 Javascript
用python + hadoop streaming 分布式编程(一) -- 原理介绍,样例程序与本地调试
2014/07/14 Python
scrapy爬虫完整实例
2018/01/25 Python
python3+PyQt5自定义视图详解
2018/04/24 Python
python自定义函数实现一个数的三次方计算方法
2019/01/20 Python
Python Django Cookie 简单用法解析
2019/08/13 Python
英国时尚服饰电商:Boohoo
2017/10/12 全球购物
波兰在线儿童和婴儿用品零售商:pinkorblue
2019/06/29 全球购物
英国在线定做百叶窗网站:Make My Blinds
2020/08/17 全球购物
特色蛋糕店创业计划书
2014/01/28 职场文书
数控专业个人求职信范文
2014/02/05 职场文书
我的老师教学反思
2014/05/01 职场文书
关于诚信的活动方案
2014/08/18 职场文书
2015年员工试用期工作总结
2014/12/12 职场文书
2014年学生党支部工作总结
2014/12/20 职场文书
2016年小学党支部创先争优活动总结
2016/04/05 职场文书
导游词之上海东方明珠塔
2019/09/25 职场文书
详解Redis集群搭建的三种方式
2021/05/31 Redis
浅谈自定义校验注解ConstraintValidator
2021/06/30 Java/Android
MySQL count(*)统计总数问题汇总
2022/09/23 MySQL