详解element-ui中form验证杂记


Posted in Javascript onMarch 04, 2019

最近接触的商户后台项目居多,自然而然就涉及到了大量的表单验证,

也就对一些常用的el-form表单验证和问题进行下梳理。

当我们添加required验证后,输入一些数据后再删除完时,会出现xxx is required,如下图所示

详解element-ui中form验证杂记

你可能很纳闷,已经为form表单传入了rules了啊,在不全部删除时,验证规则都没问题。这个问题是因为在html中使用了required字段,而在rules的规则没有设置required为true,

// html
<el-form-item label="角色名称" required prop="roleName">
 <el-input v-model="params.roleName"></el-input>  
</el-form-item>

// js
{ trigger: 'blur', message: '角色名称为必填项' }

这种情况下就会为输入框添加一条默认验证规则,就导致了上面图片情况的发生。

为了解决这种情况,我们只需要把卸载html里的required去除,并把他移动到rules的规则之中即可。

// js
{ required: true, trigger: 'blur', message: '角色名称为必填项' }
级联提交表单验证

对于一些复杂的表单,我们经常会遇到在提交前需要验证多个表单的情况。

由于element的最后validate方法是异步的。

如果每个表单都是相互独立的话,我们没必要同步的去验证所有的表单。

因此可以将每个独立的表单封装成Promise,再使用Promise.all进行回调处理。

可以参考下面使用了async/await的vue代码。

// 进行异步表单验证
async validateData () {
 this.formValidatePromiseArr = []
 this.formList.map((form, index) => {
  this.validateEachForm(form, `form${index}`)
 })
 // 如果没有全部验证成功,则进入捕获的错误处理
 try {
  await Promise.all(this.formValidatePromiseArr)
  console.log('finish')
  this.next()
 } catch (error) {
  console.log(error)
 }
},
// 校验每个独立表单数据
validateEachForm (form, name) {
 let formResult = new Promise((resolve, reject) => {
  // 利用ref取到要验证的表单
  this.$refs[name][0].validate((valid) => {
   if (valid) {
    resolve()
   } else {
    console.log(`${name}的数据不完整`)
    reject()
   }
  })
 })
 this.formValidatePromiseArr.push(formResult)
}
嵌套属性校验

对于复杂表单,我们难免需要进行更深层级的验证。

对于明确知道要验证的嵌套属性,可以在rules对象定义时,使用字符串形式指定要验证的属性,同事在prop绑定相应值。

// html
<el-form-item label="年龄信息" prop="info.age">
 <el-input v-model="form.info.age"></el-input>  
</el-form-item>

// js
rules: {
 name: [{required: true, trigger: 'blur', message: 'required'}],
 'info.age': [{required: true, trigger: 'blur', message: 'required'}]
},

对于在循环之中动态绑定的属性,则需要进行动态的prop绑定(必须是字符串形式的属性取值),再绑定指定的rules,例如

// html
<div v-for="info in form.infoList">
 <el-form-item label="年龄信息" :prop="`infoList[${index}].age`" :rules="rules.age">
  <el-input v-model="info.age"></el-input>  
 </el-form-item>
</div>

// js
rules: {
 age: [{required: true, trigger: 'blur', message: 'required'}]
},

这样就能顺利的绑定上我们需要的验证规则。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Jquery实战_读书笔记1—选择jQuery
Jan 22 Javascript
用jquery实现下拉菜单效果的代码
Jul 25 Javascript
JS实现闪动的title消息提醒效果
Jun 20 Javascript
WEB前端设计师常用工具集锦
Dec 09 Javascript
javascript数据类型验证方法
Dec 31 Javascript
AngularJS 让人爱不释手的八种功能
Mar 23 Javascript
javascript中JSON.parse()与eval()解析json的区别
May 19 Javascript
jQuery调用Webservice传递json数组的方法
Aug 06 Javascript
微信小程序 JS动态修改样式的实现代码
Feb 10 Javascript
JS排序之选择排序详解
Apr 08 Javascript
使用Angular CLI生成 Angular 5项目教程详解
Mar 18 Javascript
Vue SPA 初次进入加载动画实现代码
Nov 14 Javascript
JS使用数组实现的队列功能示例
Mar 04 #Javascript
JS使用栈判断给定字符串是否是回文算法示例
Mar 04 #Javascript
微信小程序textarea层级过高(盖住其他元素)问题的解决办法
Mar 04 #Javascript
一步快速解决微信小程序中textarea层级太高遮挡其他组件
Mar 04 #Javascript
使用ESLint禁止项目导入特定模块的方法步骤
Mar 04 #Javascript
微信小程序textarea层级过高的解决方法
Mar 04 #Javascript
浅析vue中的MVVM实现原理
Mar 04 #Javascript
You might like
解决ThinkPHP关闭调试模式时报错的问题汇总
2015/04/22 PHP
php生成gif动画的方法
2015/11/05 PHP
php实现爬取和分析知乎用户数据
2016/01/26 PHP
一个判断email合法性的函数[非正则]
2008/12/09 Javascript
十个优秀的Ajax/Javascript实例网站收集
2010/03/31 Javascript
jQuery阻止冒泡和HTML默认操作
2010/11/17 Javascript
js 限制数字 js限制输入实现代码
2012/12/04 Javascript
高效的获取当前元素是父元素的第几个子元素
2013/10/15 Javascript
删除javascript中注释语句的正则表达式
2014/06/11 Javascript
JavaScript和HTML DOM的区别与联系及Javascript和DOM的关系
2015/11/15 Javascript
JQuery日历插件My97DatePicker日期范围限制
2016/01/20 Javascript
浅谈JavaScript前端开发的MVC结构与MVVM结构
2016/06/03 Javascript
JS实现获取剪贴板内容的方法
2016/06/21 Javascript
canvas红包照片实例分享
2017/02/28 Javascript
JS图片预加载插件详解
2017/06/21 Javascript
vscode中vue-cli项目es-lint的配置方法
2018/07/30 Javascript
js图数据结构处理 迪杰斯特拉算法代码实例
2019/09/11 Javascript
vue引用外部JS的两种种方法
2020/01/28 Javascript
Javascript生成器(Generator)的介绍与使用
2021/01/31 Javascript
[03:09]2014DOTA2国际邀请赛 赛场上的美丽风景线 中国Coser也爱DOTA2
2014/07/20 DOTA
编写简单的Python程序来判断文本的语种
2015/04/07 Python
举例讲解Linux系统下Python调用系统Shell的方法
2015/11/07 Python
Python使用当前时间、随机数产生一个唯一数字的方法
2017/09/18 Python
Python实现的随机森林算法与简单总结
2018/01/30 Python
解决Python2.7读写文件中的中文乱码问题
2018/04/12 Python
Matplotlib中文乱码的3种解决方案
2018/11/15 Python
python的dict判断key是否存在的方法
2020/12/09 Python
HTML5添加禁止缩放功能
2017/11/03 HTML / CSS
Deux par Deux官方网站:设计师童装
2020/01/03 全球购物
临床医学专业毕业生的自我评价
2013/10/17 职场文书
电大会计学自我鉴定
2014/02/06 职场文书
改革共识倡议书
2014/08/29 职场文书
2014年仓库保管员工作总结
2014/12/03 职场文书
2015年保洁员工作总结
2015/05/04 职场文书
音乐研修感悟
2015/11/18 职场文书
原来闭幕词是这样写的呀!
2019/07/01 职场文书