使用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动态添加删除table行的示例代码
Dec 16 Javascript
js点击出现悬浮窗效果不使用JQuery插件
Jan 20 Javascript
JavaScript中的console.time()函数详细介绍
Dec 29 Javascript
JavaScript实现给按钮加上双重动作的方法
Aug 14 Javascript
Express的路由详解
Dec 10 Javascript
jQuery+PHP实现微信转盘抽奖功能的方法
May 25 Javascript
js实时监控文本框输入字数的实例代码
Jan 18 Javascript
JS执行控制之节流模式实例分析
Dec 21 Javascript
更优雅的微信小程序骨架屏实现详解
Aug 07 Javascript
layer弹出层显示在top顶层的方法
Sep 11 Javascript
Jquery让form表单异步提交代码实现
Nov 14 jQuery
vue通过接口直接下载java生成好的Excel表格案例
Oct 26 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 定界符 使用技巧
2009/06/14 PHP
PHP计划任务、定时执行任务的实现代码
2011/04/23 PHP
yii添删改查实例
2015/11/16 PHP
PHP中的函数声明与使用详解
2017/05/27 PHP
js用图作提交按钮或超连接
2008/03/26 Javascript
设置下载不需要倒计时cookie(倒计时代码)
2008/11/19 Javascript
js字母大小写转换实现方法总结
2013/11/13 Javascript
判断javascript的数据类型(示例代码)
2013/12/11 Javascript
原生js实现图片层叠轮播切换效果
2016/02/02 Javascript
微信小程序 数据封装,参数传值等经验分享
2017/01/09 Javascript
javascript设计模式之策略模式学习笔记
2017/02/15 Javascript
详解nodejs微信公众号开发——1.接入微信公众号
2017/04/10 NodeJs
详解vue+vueRouter+webpack的简单实例
2017/06/17 Javascript
基于jQuery实现图片推拉门动画效果的两种方法
2017/08/26 jQuery
jquery如何实现点击空白处隐藏元素
2017/12/05 jQuery
JS正则表达式常见用法实例详解
2018/06/19 Javascript
jquery.pagination.js分页使用教程
2018/10/23 jQuery
vue中如何去掉空格的方法实现
2018/11/09 Javascript
VUE页面中通过双击实现复制表格中内容的示例代码
2020/06/11 Javascript
浅谈python字典多键值及重复键值的使用
2016/11/04 Python
Python中矩阵创建和矩阵运算方法
2018/08/04 Python
python中多个装饰器的调用顺序详解
2019/07/16 Python
django 快速启动数据库客户端程序的方法示例
2019/08/16 Python
python plt可视化——打印特殊符号和制作图例代码
2020/04/17 Python
浅谈python量化 双均线策略(金叉死叉)
2020/06/03 Python
查看keras各种网络结构各层的名字方式
2020/06/11 Python
python使用建议技巧分享(三)
2020/08/18 Python
Scrapy爬虫文件批量运行的实现
2020/09/30 Python
css3实现简单的白云飘动背景特效
2020/10/28 HTML / CSS
2014年党总支工作总结
2014/12/18 职场文书
2015年三八妇女节活动总结
2015/02/06 职场文书
高校自主招生校长推荐信
2015/03/23 职场文书
幼师求职自荐信
2015/03/26 职场文书
酒店前台岗位职责
2015/04/16 职场文书
2016年“六一儿童节”校园广播稿
2015/12/17 职场文书
R9700摩机记
2022/04/05 无线电