使用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 相关文章推荐
新浪的图片新闻效果
Jan 13 Javascript
背景图跟随鼠标移动的Mootools插件实现代码
Dec 12 Javascript
什么是DOM(Document Object Model)文档对象模型
Mar 05 Javascript
使用Chrome调试JavaScript的断点设置和调试技巧
Dec 16 Javascript
AngularJS入门教程之AngularJS表达式
Apr 18 Javascript
Bootstrap禁用响应式布局的实现方法
Mar 09 Javascript
JS动态添加的div点击跳转到另一页面实现代码
Sep 30 Javascript
浅谈Emergence.js 检测元素可见性的 js 插件
Nov 18 Javascript
vue-cli 打包使用history模式的后端配置实例
Sep 20 Javascript
100行代码实现vue表单校验功能(小白自编)
Nov 19 Javascript
js实现百度淘宝搜索功能
Feb 17 Javascript
JavaScript事件循环及宏任务微任务原理解析
Sep 02 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+MYSQL会员系统的开发实例教程
2014/08/23 PHP
学习php设计模式 php实现抽象工厂模式
2015/12/07 PHP
Laravel5.4简单实现app接口Api Token认证方法
2019/08/29 PHP
Javascript开发包大全整理
2006/12/22 Javascript
网页开发中的容易忽略的问题 javascript HTML中的table
2009/04/15 Javascript
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之三
2012/01/03 Javascript
javascript SpiderMonkey中的函数序列化如何进行
2012/12/05 Javascript
Jquery 表单验证类介绍与实例
2013/06/09 Javascript
js实现正方形颜色从下往上升的效果
2014/08/04 Javascript
关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法
2016/05/17 Javascript
jQuery实现鼠标选中文字后弹出提示窗口效果【附demo源码】
2016/09/05 Javascript
jquery dialog获取焦点的方法
2017/02/09 Javascript
ES6新增数据结构WeakSet的用法详解
2017/08/07 Javascript
用Vue.extend构建消息提示组件的方法实例
2017/08/08 Javascript
浅谈Vue SSR 的 Cookies 问题
2017/11/20 Javascript
浅谈Vue.js中ref ($refs)用法举例总结
2017/12/19 Javascript
jQuery第一次运行页面默认触发点击事件的实例
2018/01/10 jQuery
详解如何配置vue-cli3.0的vue.config.js
2018/08/23 Javascript
Jquery的autocomplete插件用法及参数讲解
2019/03/12 jQuery
node中使用es6/7/8(支持性与性能)
2019/03/28 Javascript
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
2019/04/01 Javascript
vue 插槽简介及使用示例
2020/11/19 Vue.js
[05:56]第十六期——新进3大C之小兔基
2014/06/24 DOTA
Python实现删除当前目录下除当前脚本以外的文件和文件夹实例
2015/07/27 Python
python实现汉诺塔递归算法经典案例
2021/03/01 Python
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
2016/06/29 Python
python http接口自动化脚本详解
2018/01/02 Python
使用Python微信库itchat获得好友和群组已撤回的消息
2018/06/24 Python
美国在线精品家居网站:Burke Decor
2017/04/12 全球购物
廉价航班、机票和酒店:JustFly
2018/02/07 全球购物
C#面试题问题集
2016/04/02 面试题
转党组织关系介绍信
2014/01/08 职场文书
优秀安全员事迹材料
2014/05/11 职场文书
2015年小学美术工作总结
2015/05/25 职场文书
如何理解Vue简单状态管理之store模式
2021/05/15 Vue.js
PYTHON使用Matplotlib去实现各种条形图的绘制
2022/03/22 Python