详解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 相关文章推荐
JS 文字符串转换unicode编码函数
May 30 Javascript
可以将word转成html的js代码
Apr 11 Javascript
JavaScript中继承的一些示例方法与属性参考
Aug 07 Javascript
简短几句jquery代码的实现一个图片向上滚动切换
Sep 02 Javascript
深入浅出理解javaScript原型链
May 09 Javascript
使用Web Uploader实现多文件上传
Jun 08 Javascript
JavaScript正则表达式实例详解
Oct 16 Javascript
简单理解vue中Props属性
Oct 27 Javascript
jQuery实现自动调用和触发某个事件的方法
Nov 18 Javascript
JS函数节流和函数防抖问题分析
Dec 18 Javascript
详解Vue 全局引入bass.scss 处理方案
Mar 26 Javascript
微信小程序利用swiper+css实现购物车商品删除功能
Mar 06 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新手用的Insert和Update语句构造类
2012/03/31 PHP
php中调用其他系统http接口的方法说明
2014/02/28 PHP
php和editplus正则表达式去除空白行
2015/04/17 PHP
jQuery圆形统计图开发实例
2015/01/04 Javascript
JQuery使用$.ajax和checkbox实现下次不在通知功能
2015/04/16 Javascript
关于vue.js弹窗组件的知识点总结
2016/09/11 Javascript
JS点击图片弹出文件选择框并覆盖原图功能的实现代码
2017/08/25 Javascript
JS实现在文本指定位置插入内容的简单示例
2017/12/22 Javascript
Vue.set()动态的新增与修改数据,触发视图更新的方法
2018/09/15 Javascript
如何自定义微信小程序tabbar上边框的颜色
2019/07/09 Javascript
Vue中图片Src使用变量的方法
2019/10/30 Javascript
解决ant-design-vue中menu菜单无法默认展开的问题
2020/10/31 Javascript
JavaScript实现4位随机验证码的生成
2021/01/28 Javascript
详解js创建对象的几种方式和对象方法
2021/03/01 Javascript
python3 pillow生成简单验证码图片的示例
2017/09/19 Python
利用python将xml文件解析成html文件的实现方法
2017/12/22 Python
python 将字符串转换成字典dict的各种方式总结
2018/03/23 Python
tensorflow实现加载mnist数据集
2018/09/08 Python
详解Python 定时框架 Apscheduler原理及安装过程
2019/06/14 Python
Python集合基本概念与相关操作实例分析
2019/10/30 Python
基于python操作ES实例详解
2019/11/16 Python
python中设置超时跳过,超时退出的方式
2019/12/13 Python
手把手教你进行Python虚拟环境配置教程
2020/02/03 Python
tensorflow 环境变量设置方式
2020/02/06 Python
探索HTML5本地存储功能运用技巧
2016/03/02 HTML / CSS
MVMT手表官方网站:时尚又实惠的高品质手表
2016/12/04 全球购物
加拿大时尚床上用品零售商:QE Home | Quilts Etc
2018/01/22 全球购物
查询优化的一般准则有哪些
2015/03/08 面试题
自主招生自荐信范文
2013/12/04 职场文书
高中语文教学反思
2014/01/16 职场文书
幼儿园课题方案
2014/06/09 职场文书
2014年秋季新学期寄语
2014/08/02 职场文书
家长高考寄语
2015/02/27 职场文书
react如何快速设置文件路径别名
2021/04/28 Javascript
解决Golang中goroutine执行速度的问题
2021/05/02 Golang
mysql事务隔离级别详情
2021/10/24 MySQL