详解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的tab切换效果代码[代码分离]
Apr 11 Javascript
JavaScript中的document.referrer在各种浏览器测试结果
Jul 18 Javascript
JavaScript字符串对象substring方法入门实例(用于截取字符串)
Oct 17 Javascript
jQuery中:input选择器用法实例
Jan 03 Javascript
jQuery插件EasyUI校验规则 validatebox验证框
Nov 29 Javascript
轻松实现jquery选项卡切换效果
Oct 10 Javascript
Angularjs使用ng-repeat中$even和$odd属性的注意事项
Dec 31 Javascript
JS实现颜色动态淡化效果
Mar 06 Javascript
JavaScript装饰器函数(Decorator)实例详解
Mar 30 Javascript
Vue2.0 v-for filter列表过滤功能的实现
Sep 07 Javascript
async/await优雅的错误处理方法总结
Jan 30 Javascript
解决VUE 在IE下出现ReferenceError: Promise未定义的问题
Nov 07 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 调试环境(IIS+PHP+MYSQL)
2007/01/10 PHP
PHP编码转换函数 自动转换字符集支持数组转换
2012/12/16 PHP
PHP错误和异长常处理总结
2014/03/06 PHP
php foreach如何跳出两层循环(详解)
2016/11/05 PHP
thinkPHP5.0框架事务处理操作简单示例
2018/09/07 PHP
关于javascript 回调函数中变量作用域的讨论
2009/09/11 Javascript
JS获取下拉列表所选中的TEXT和Value的实现代码
2014/01/11 Javascript
基于JQuery实现的图片自动进行缩放和裁剪处理
2014/01/31 Javascript
JS操作CSS随机改变网页背景实现思路
2014/03/10 Javascript
一个JavaScript用逗号分割字符串实例
2014/09/22 Javascript
javascript基于DOM实现省市级联下拉框的方法
2015/05/14 Javascript
js代码实现随机颜色的小方块
2015/07/30 Javascript
JavaScript 基础函数_深入剖析变量和作用域
2016/05/18 Javascript
14 个折磨人的 JavaScript 面试题
2016/08/08 Javascript
jquery easyui如何实现格式化列
2017/07/30 jQuery
vue+mockjs模拟数据实现前后端分离开发的实例代码
2017/08/08 Javascript
Vue中render函数的使用方法
2018/01/31 Javascript
AngularJS模态框模板ngDialog的使用详解
2018/05/11 Javascript
vue2.0 如何在hash模式下实现微信分享
2019/01/22 Javascript
Vue项目中使用WebUploader实现文件上传的方法
2019/07/21 Javascript
JSONP 的原理、理解 与 实例分析
2020/05/16 Javascript
精读《Vue3.0 Function API》
2020/05/20 Javascript
vue组件中传值EventBus的使用及注意事项说明
2020/11/16 Javascript
python贪婪匹配以及多行匹配的实例讲解
2018/04/19 Python
python画蝴蝶曲线图的实例
2019/11/21 Python
BOSE德国官网:尽探索之力,享音乐之极
2016/12/11 全球购物
英国儿童设计师服装和玩具购物网站:Zac & Lulu
2020/10/19 全球购物
药学专业大学生自荐信
2013/09/28 职场文书
资料员的岗位职责
2013/11/20 职场文书
幼儿园保育员责任书
2014/07/22 职场文书
科级干部群众路线教育实践活动对照检查材料思想汇报
2014/09/20 职场文书
班子个人四风问题整改措施
2014/10/04 职场文书
2014年加油站工作总结
2014/12/04 职场文书
2019员工保密协议书(3篇)
2019/09/23 职场文书
你知道哪几种MYSQL的连接查询
2021/06/03 MySQL
Mysql排查分析慢sql之explain实战案例
2022/04/19 MySQL