详解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 相关文章推荐
javascript Keycode对照表
Oct 24 Javascript
js弹窗代码 可以指定弹出间隔
Jul 03 Javascript
jqPlot 基于jquery的画图插件
Apr 26 Javascript
js猜数字小游戏的简单实现代码
Jul 02 Javascript
jquery中的过滤操作详细解析
Dec 02 Javascript
自己使用js/jquery写的一个定制对话框控件
May 02 Javascript
Javascript中拼接大量字符串的方法
Feb 05 Javascript
JS控制表单提交的方法
Jul 09 Javascript
jQuery实现平滑滚动的标签分栏切换效果
Aug 28 Javascript
JavaScript程序设计之JS调试
Dec 09 Javascript
Angular6封装http请求的步骤详解
Aug 13 Javascript
亲自动手实现vue日历控件
Jun 26 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
通过html表格发电子邮件
2006/10/09 PHP
php下mysql数据库操作类(改自discuz)
2010/07/03 PHP
PHP 枚举类型的管理与设计知识点总结
2020/02/13 PHP
jquery提升性能最佳实践小结
2010/12/06 Javascript
解析js中获得父窗口链接getParent方法以及各种打开窗口的方法
2013/06/19 Javascript
浅谈Javascript中深复制
2014/12/01 Javascript
JavaScript实现给按钮加上双重动作的方法
2015/08/14 Javascript
plupload+artdialog实现多平台上传文件
2016/07/19 Javascript
jQuery控制控件文本的长度的操作方法
2016/12/05 Javascript
JS实现超简单的汉字转拼音功能示例
2016/12/22 Javascript
js实现的xml对象转json功能示例
2016/12/24 Javascript
Ajax跨域实现代码(后台jsp)
2017/01/21 Javascript
微信小程序loading组件显示载入动画用法示例【附源码下载】
2017/12/09 Javascript
vue3.0中使用postcss-pxtorem的具体方法
2019/11/20 Javascript
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
Python中的exec、eval使用实例
2014/09/23 Python
Python使用MYSQLDB实现从数据库中导出XML文件的方法
2015/05/11 Python
Python面向对象编程中关于类和方法的学习笔记
2016/06/30 Python
通过Python模块filecmp 对文件比较的实现方法
2018/06/29 Python
Python定义二叉树及4种遍历方法实例详解
2018/07/05 Python
关于python之字典的嵌套,递归调用方法
2019/01/21 Python
django中ORM模型常用的字段的使用方法
2019/03/05 Python
python实现弹跳小球
2019/05/13 Python
使用python分析统计自己微信朋友的信息
2019/07/19 Python
Django使用Celery加redis执行异步任务的实例内容
2020/02/20 Python
pycharm 代码自动补全的实现方法(图文)
2020/09/18 Python
Django中如何用xlwt生成表格的方法步骤
2021/01/31 Python
英国最大最好的无人机商店:Drones Direct
2019/07/12 全球购物
JACK & JONES荷兰官网:男士服装和鞋子
2021/03/07 全球购物
关爱留守儿童倡议书
2014/04/15 职场文书
大学生活动总结怎么写
2014/04/29 职场文书
党员廉洁自律承诺书
2014/05/26 职场文书
教师党员批评与自我批评发言稿
2014/10/15 职场文书
2015年干部教育培训工作总结
2015/05/15 职场文书
Pandas加速代码之避免使用for循环
2021/05/30 Python
Mysql的Table doesn't exist问题及解决
2022/12/24 MySQL