element-ui中form验证杂记-程序员宅基地

技术标签: ViewUI  ui  javascript  

最近接触的商户后台项目居多,自然而然就涉及到了大量的表单验证,
也就对一些常用的el-form表单验证和问题进行下梳理。

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

图片描述

你可能很纳闷,已经为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'}]
},

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34062469/article/details/88532521

智能推荐

Python 框架 之 Django 的数据后台管理平台,简单的搭建、以及数据基本操作_python数据管理平台作用-程序员宅基地

文章浏览阅读3k次,点赞2次,收藏25次。Python 框架 之 Django 的数据后台管理平台,简单的搭建、以及数据基本操作目录Python 框架 之 Django 的数据后台管理平台,简单的搭建、以及数据基本操作一、简单介绍二、实现原理三、注意实现四、效果预览五、创建数据管理后台账户,登录后台管理六、注册模型类,以及添加自定义模型管理类,调整数据显示七、后台管理的数据基本操作八、关键代码一、简单介绍Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型..._python数据管理平台作用

HBP-1100U 欧姆龙血压计的USB调用方法_欧姆龙hbp1100u说明书-程序员宅基地

文章浏览阅读4.8k次。安装HIDcontroller控件。1、用USB设备名获取VID,PID,建立临时缓冲区。2、checkout建立usb设备的线程3、拔插下来checkin销毁线程4、通过ondata事件获取数据指针5、通过数据指针对16进制数进行转换10进制,并处理显示unit Unit1;interfaceuses Windows, Messages, SysUtils, Var..._欧姆龙hbp1100u说明书

jupyter plotly画图不显示_jupyternotebook中plotly的图不显示-程序员宅基地

文章浏览阅读5.8k次,点赞5次,收藏11次。很多帖子说加%matplotlib inline在jupyter能用,kaggle kernel还是一片白色,原代码:from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplotimport cufflinks as cfcf.go_offline()###这两句是离线生成图片的设置cf.set_config_file(offline=True, world_readable=True)根据https:/_jupyternotebook中plotly的图不显示

CString转string_catlstring转string-程序员宅基地

文章浏览阅读1.2k次。转换分两种情况,就VS中的配置而言,这两种情况就是宽字符集和UNICODE字符集。宽字符集情况下的转换:CString str = _T("123456");string stdString(str.GetBuffer(0));str.ReleaseBuffer();这种转换网上很常见,基本能搜索到的都是这种转换,并不区分字符集,如果是使用的UNICODE字符集这种转换是会报错的,_catlstring转string

linux字符串截取_sed提取两个关键字之间的内容-程序员宅基地

文章浏览阅读1.1k次。通过这个 sed|awk 命令,我们将匹配到的两个 | 符号之间的内容提取出来_sed提取两个关键字之间的内容

word增加mathtype跳转引用_论文中mathtype公式怎么跳转-程序员宅基地

文章浏览阅读1.9k次。写毕设的时候,发现师兄的论文中公式跳转设置很方便,记录一下。随便编写一个右编号公式,然后在任意想插入引用的地方,比如说我想在"对于"二次后面插入式1.2的引用。首先将光标定位到“对于”后面,然后在mathtype的插件栏点击“插入引用”对于初始使用会有下面的提示框:选择ok,然后双击想插入引用的公式右编号的序号,比如想插入公式1.2,就双击“(1.2)”,双击完,插入的引用公式编号就会出现在“对于”后面。以后假设公式1.2被修改了序号后,“对于”后面的公式序号也会一起改动,而不需_论文中mathtype公式怎么跳转

随便推点

vnc分辨率修改_vnc 改变分辨率-程序员宅基地

文章浏览阅读1.2w次,点赞2次,收藏22次。最近一直在用putty或Xshell登录linux服务器,今天用ultraVNC Viewer登录服务器时发现自己的vnc服务器挂掉了。在此,整理下vnc操作的基本命令。查看vnc进程:ps -ef | grep vnc 该命令可以列出当前系统上所有用户vnc界面的端口号,分辨率等信息。 我们要用到的只是端口号。杀掉自己vnc端口对应的进程vncserver -kill :43 我的端口号是4_vnc 改变分辨率

springBoot启动项目时导入依赖_com.alibaba.boot 依赖引入-程序员宅基地

文章浏览阅读1.1k次。pom文件常用依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/m_com.alibaba.boot 依赖引入

boost::string_ref使用详解-程序员宅基地

文章浏览阅读1.5k次。1、string_ref不分配内存,不对字符串进行拷贝,通过其内部的两个成员变量ptr_和len_标记字符串的起始位置和字符串的长度,实现了字符串的表示,所以效率很高。2、一般情况下,我们使用string_ref只是去观察字符串,而不是去修改字符串。3、在使用string_ref期间,我们应该保证被引用的原始字符串对象可用,不能销毁。如果我们确实需要持有字符串,可以调用成员函数to_str..._string_ref

zookeeper下载安装部署_zookeeper部署(1),2024年最新34岁大数据开发开发大叔感慨-程序员宅基地

文章浏览阅读862次,点赞30次,收藏25次。【代码】zookeeper下载安装部署_zookeeper部署(1),2024年最新34岁大数据开发开发大叔感慨。

源码解析-AsyncTask sDefaultExecutor解析_async task的启动方式为-程序员宅基地

文章浏览阅读669次。上篇博文我們一起查看了AsyncTask的执行流程,但是由于篇幅的原因,我们没有对AsyncTask的默认启动方式(sDefaultExecutor)进行解析。那么,这篇博文我们对sDefaultExecutor进行解析。相关博文Android基础-AsyncTask基本使用源码解析-AsyncTask源码解析我们先回顾一下在上篇博文中的内容,再启动AsyncTask的时候我..._async task的启动方式为

华硕T100TA安装凤凰OS_华硕t100ta装凤凰os教程-程序员宅基地

文章浏览阅读8.2k次,点赞2次,收藏9次。以前买的老电脑了,吃灰多年,现在跑win10性能完全跟不上了。1.镜像下载安装准备去凤凰OS官网下载下载 下载PE镜像链接:https://pan.baidu.com/s/17zUro5-EL70O1TRkBNC9Mw提取码:rlpu这里的PE盘的制作,我用了网上很多工具制作的PE都不能正常运行,必须要用这个专用的PE镜像来制作2.安装凤凰OS插上U盘,然后开机,..._华硕t100ta装凤凰os教程