详解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 闭包深入理解(closure)
May 27 Javascript
人人网javascript面试题 可以提前实现下
Jan 05 Javascript
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
Dec 29 Javascript
AngularJS中取消对HTML片段转义的方法例子
Jan 04 Javascript
JavaScript中指定函数名称的相关方法
Jun 04 Javascript
Angular4如何自定义首屏的加载动画详解
Jul 26 Javascript
编写React组件项目实践分析
Mar 04 Javascript
详解AngularJS 过滤器的使用
Jun 02 Javascript
微信小程序显示倒计时功能示例【测试可用】
Dec 03 Javascript
在vue中使用防抖和节流,防止重复点击或重复上拉加载实例
Nov 13 Javascript
Taro UI框架开发小程序实现左滑喜欢右滑不喜欢效果的示例代码
May 18 Javascript
vue项目在webpack2实现移动端字体自适配功能
Jun 02 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实现多服务器session共享之NFS共享的方法
2007/03/16 PHP
php5 pdo新改动加载注意事项
2008/09/11 PHP
Trying to clone an uncloneable object of class Imagic的解决方法
2012/01/11 PHP
php通过Chianz.com获取IP地址与地区的方法
2015/01/14 PHP
php通过文件头判断格式的方法
2016/05/28 PHP
使用JavaScript实现连续滚动字幕效果的方法
2015/07/07 Javascript
js实现input框文字动态变换显示效果
2015/08/19 Javascript
js实现input密码框提示信息的方法(附html5实现方法)
2016/01/14 Javascript
jquery制做精致的倒计时特效
2016/06/13 Javascript
jQuery的deferred对象使用详解
2016/09/25 Javascript
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
2016/12/15 Javascript
JS ES6多行字符串与连接字符串的表示方法
2017/04/26 Javascript
详解angularjs中的隔离作用域理解以及绑定策略
2017/05/31 Javascript
angular学习之从零搭建一个angular4.0项目
2017/07/10 Javascript
Three.js开发实现3D地图的实践过程总结
2017/11/20 Javascript
vue中解决拖拽改变存在iframe的div大小时卡顿问题
2020/07/22 Javascript
javascript canvas封装动态时钟
2020/09/30 Javascript
js实现复制粘贴的两种方法
2020/12/04 Javascript
[01:10]3.19DOTA2发布会 三代刀塔人第一代
2014/03/25 DOTA
11个并不被常用但对开发非常有帮助的Python库
2015/03/31 Python
Python验证企业工商注册码
2015/10/25 Python
python 读取文件并替换字段的实例
2018/07/12 Python
python调用并链接MATLAB脚本详解
2019/07/05 Python
Python实现时间序列可视化的方法
2019/08/06 Python
python面向对象之类属性和类方法案例分析
2019/12/30 Python
numpy库reshape用法详解
2020/04/19 Python
Python并发爬虫常用实现方法解析
2020/11/19 Python
CSS3动画效果回调处理详解
2014/12/10 HTML / CSS
天猫国际进口超市直营:官方直采,一站购齐
2017/12/11 全球购物
艺术系应届生的自我评价
2013/10/19 职场文书
《小蝌蚪找妈妈》教学反思
2014/02/21 职场文书
诉讼授权委托书范本
2014/10/05 职场文书
群众路线教育实践活动学习笔记
2014/11/05 职场文书
计划生育个人总结
2015/03/02 职场文书
营业员岗位职责范本
2015/04/14 职场文书
大队委员竞选稿
2015/11/20 职场文书