详解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实现无刷新DropDownList联动实现代码
Mar 08 Javascript
jquery1.83 之前所有与异步列队相关的模块详细介绍
Nov 13 Javascript
jQuery固定元素插件scrolltofixed使用指南
Apr 21 Javascript
js插件设置innerHTML时在IE8下提示“未知运行时错误”解决方法
Apr 25 Javascript
JavaScript jQuery 中定义数组与操作及jquery数组操作
Dec 18 Javascript
如何利用JSHint减少JavaScript的错误
Aug 23 Javascript
浅析Javascript ES6新增值比较函数Object.is
Aug 24 Javascript
微信小程序 教程之模板
Oct 18 Javascript
Angular表单验证实例详解
Oct 20 Javascript
Spring Boot+AngularJS+BootStrap实现进度条示例代码
Mar 02 Javascript
Vue+SpringBoot开发V部落博客管理平台
Dec 27 Javascript
Nuxt的动态路由和参数校验操作
Nov 09 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
php实现的在线人员函数库
2008/04/09 PHP
php适配器模式介绍
2012/08/14 PHP
php实现点击可刷新验证码
2015/11/07 PHP
中高级PHP程序员应该掌握哪些技术?
2016/09/23 PHP
PHP缩略图生成和图片水印制作
2017/01/07 PHP
浅析PHP7 的垃圾回收机制
2019/09/06 PHP
学习jquery必备 api中英文对照的chm手册 下载
2007/05/03 Javascript
JavaScript类型转换方法及需要注意的问题小结(挺全面)
2010/11/11 Javascript
js新闻滚动 js如何实现新闻滚动效果
2013/01/07 Javascript
判断window.onload是否多次使用的方法
2014/09/21 Javascript
将页面table内容与样式另存成excel文件的方法
2015/08/05 Javascript
jQuery实现带玻璃流光质感的手风琴特效
2015/11/20 Javascript
nodejs开发微信小程序实现密码加密
2017/07/11 NodeJs
three.js 入门案例详解
2018/01/23 Javascript
ES6之模版字符串的具体使用
2018/05/17 Javascript
记录vue做微信自定义分享的一些问题
2019/09/12 Javascript
OpenLayers3实现对地图的基本操作
2020/09/28 Javascript
Python文件读取的3种方法及路径转义
2015/06/21 Python
对Python中type打开文件的方式介绍
2018/04/28 Python
Python爬虫之正则表达式的使用教程详解
2018/10/25 Python
利用python求积分的实例
2019/07/03 Python
python 实现图片上传接口开发 并生成可以访问的图片url
2019/12/18 Python
基于python修改srt字幕的时间轴
2020/02/03 Python
h5调用摄像头的实现方法
2016/06/01 HTML / CSS
加拿大领先家居家具网上购物:Aosom.ca
2020/05/27 全球购物
描述一下JVM加载class文件的原理机制
2013/12/08 面试题
《最后的姿势》教学反思
2014/02/27 职场文书
小摄影师教学反思
2014/04/27 职场文书
村党支部换届选举方案
2014/05/02 职场文书
社区活动总结范文
2015/05/07 职场文书
社区干部培训心得体会
2016/01/06 职场文书
如何撰写出一份完美的商业计划书?
2019/07/12 职场文书
CSS3 菱形拼图实现只旋转div 背景图片不旋转功能
2021/03/30 HTML / CSS
PHP中->和=>的意思
2021/03/31 PHP
用JS实现飞机大战小游戏
2021/06/09 Javascript
vue里使用create, mounted调用方法
2022/04/26 Vue.js