当前位置: 首页 > news >正文

elementui 复杂 表单验证_详解element-ui中form验证杂记

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

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

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

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

// html

// 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

// js

rules: {

name: [{required: true, trigger: 'blur', message: 'required'}],

'info.age': [{required: true, trigger: 'blur', message: 'required'}]

},

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

// html

// js

rules: {

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

},

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

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

时间: 2019-03-03

相关文章:

  • python mp3_Python修改MP3文件的方法
  • JDOM入门...
  • 伽罗华有限域_有限域 伽罗瓦域
  • 一句话Solaris技巧与WIN32对比[欢迎评论]
  • 显示前半内容后半内容用省略号_js封装的一行半显示省略号。(字数自由控制)...
  • ios比较字符串判断为空_iOS-判断字符串为空你以为这么简单吗?
  • 可笑的UMLed
  • dct变换可以用什么方法代替_DCT变换
  • python 数据框按行拼接_python-从其他数据框按行查找
  • Oracle最差实践(一)
  • ln函数怎么看奇偶性_【小白必看】python函数是什么?python函数的定义? python函数怎么使用?...
  • vaspkit使用_vaspkit.014安装使用说明
  • Asp.Net IIS 管理类(全)
  • html包含头尾文件_HTML文件的结构包括头部(Head)、主体(Body)两大部分
  • SSIS学习之SSIS介绍
  • 【391天】每日项目总结系列128(2018.03.03)
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • iOS 颜色设置看我就够了
  • Java 网络编程(2):UDP 的使用
  • JS专题之继承
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Redis字符串类型内部编码剖析
  • spark本地环境的搭建到运行第一个spark程序
  • Spring声明式事务管理之一:五大属性分析
  • TypeScript实现数据结构(一)栈,队列,链表
  • Vim 折腾记
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 分布式事物理论与实践
  • 构建二叉树进行数值数组的去重及优化
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 设计模式 开闭原则
  • 思维导图—你不知道的JavaScript中卷
  • 微信小程序实战练习(仿五洲到家微信版)
  • Spring第一个helloWorld
  • 扩展资源服务器解决oauth2 性能瓶颈
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (33)STM32——485实验笔记
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (轉貼) UML中文FAQ (OO) (UML)
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • ../depcomp: line 571: exec: g++: not found
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET Core 中的路径问题
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .NET框架