基于Vue+elementUI实现动态表单的校验功能(根据条件动态切换校验格式)


Posted in Javascript onApril 04, 2019

前言

开发过程中遇到了一个需求,根据用户选择的联系方式,动态改变输入框的检验条件,并且整个表单是可以增加的

在线访问:动态表单校验

github(欢迎star): https://github.com/Mrblackant. ..

基于Vue+elementUI实现动态表单的校验功能(根据条件动态切换校验格式)

思考几个问题

1.整个表单是可新增的,所以要遍历生成;

2.联系方式(手机/座机)的切换,是要切换后边不同类型输入框还是只改变校验规则(本篇是动态改变校验规则)

实现

1.elementui的form表单实现校验的时候要给当前el-form-item加上prop属性,因为我们是遍历生成的表单,那我们的写法就要写成:

重点在prop属性

<template v-for="(k,index) in formData.lists">
 <el-form-item
 :ref="index+'concatValue'"
 :prop="'lists.' + index +'.concatValue'"
 :rules="k.rules">
 <el-input v-model="k.concatValue"></el-input>
 </el-form-item>
</template>

2.因为我选择了根据类型动态修改校验规则,而不是切换不同类型的输入框,

注意看下上文代码中的ref和rules,当类型切换时,对应的:rules=k.rules对应的规则也会进行修改,:ref属性是为了切换联系方式类型时,先清除掉之前的提示。

看下不同类型的校验规则,统一的先放到一个地方:

inputRules: {//设置好需要的校验规则
  telephone: { pattern: /^1[3-9]\d{9}$/, message: '手机号格式错误', trigger: 'blur' },
  phone: { pattern: /^\d{10,12}$/, message: '座机号格式错误', trigger: 'blur' },
  QQ: { pattern: /^[1-9][0-9]{4,14}$/, message: 'QQ格式错误', trigger: 'blur' },
  mail: { pattern: /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/, message: '邮箱格式错误', trigger: 'blur' }
  },

3.如果你的联系方式的值都是必填的,可以先写一个统一的必填校验,省的在步骤2代码里重复写

const baseRule = [
 { required: true, message: '请填写联系方式', trigger: 'blur' }
]

然后等切换校验类型的时候,把必填校验baseRule连接起来:

// 给表单加上新的校验
  this.formData.lists[index].rules = [this.inputRules[data]].concat(baseRule)

动态表单校验、动态校验规则这块没有太难的地方,就是有时候会被绕晕,所以拿出来记录一下,大家有更好的方案欢迎指出

总结

以上所述是小编给大家介绍的基于Vue+elementUI实现动态表单的校验功能(根据条件动态切换校验格式),希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
解决遍历时Array.indexOf产生的性能问题
Jul 03 Javascript
JQuery表单验证插件EasyValidator用法分析
Nov 15 Javascript
jQuery实现DIV层淡入淡出拖动特效的方法
Feb 13 Javascript
JavaScript实现的多种鼠标拖放效果
Nov 03 Javascript
Javascript打印局部页面实例
Jun 21 Javascript
node.js文件上传处理示例
Oct 27 Javascript
微信小程序 开发工具快捷键整理
Oct 31 Javascript
微信小程序 二维码canvas绘制实例详解
Jan 06 Javascript
Vue中的scoped实现原理及穿透方法
May 15 Javascript
JavaScript实现随机五位数验证码
Sep 27 Javascript
ant design vue导航菜单与路由配置操作
Oct 28 Javascript
JavaScript模拟实现网易云轮播效果
Apr 04 Javascript
vue学习笔记五:在vue项目里面使用引入公共方法详解
Apr 04 #Javascript
JavaScript多种页面刷新方法小结
Apr 04 #Javascript
详解easyui 切换主题皮肤
Apr 04 #Javascript
jQuery分组选择器简单用法示例
Apr 04 #jQuery
qrcode生成二维码微信长按无法识别问题的解决
Apr 04 #Javascript
jQuery实现带3D切割效果的轮播图功能示例【附源码下载】
Apr 04 #jQuery
vue19 组建 Vue.extend component、组件模版、动态组件 的实例代码
Apr 04 #Javascript
You might like
在Zeus Web Server中安装PHP语言支持
2006/10/09 PHP
日常整理PHP中简单的图形处理(经典)
2015/10/26 PHP
PHP 读取文本文件内容并分页显示
2016/01/02 PHP
javascript读写json示例
2014/04/11 Javascript
jQuery提示插件alertify使用指南
2015/04/21 Javascript
jQuery对象与DOM对象转换方法详解
2016/05/10 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
2016/07/22 Javascript
解决vue.js在编写过程中出现空格不规范报错的问题
2017/09/20 Javascript
关于微信小程序bug记录与解决方法
2018/08/15 Javascript
在Vue mounted方法中使用data变量详解
2019/11/05 Javascript
小程序实现多个选项卡切换
2020/06/19 Javascript
[52:10]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第二场 6.3
2018/06/04 DOTA
python使用7z解压软件备份文件脚本分享
2014/02/21 Python
Python实现调度算法代码详解
2017/12/01 Python
基于Python中numpy数组的合并实例讲解
2018/04/04 Python
pandas将DataFrame的列变成行索引的方法
2018/04/10 Python
python实现列表中由数值查到索引的方法
2018/06/27 Python
TensorFlow打印tensor值的实现方法
2018/07/27 Python
Django Celery异步任务队列的实现
2019/07/24 Python
如何使用Python脚本实现文件拷贝
2019/11/20 Python
opencv3/Python 稠密光流calcOpticalFlowFarneback详解
2019/12/11 Python
python3 xpath和requests应用详解
2020/03/06 Python
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
2020/07/03 Python
详解CSS3选择器的使用方法汇总
2015/11/24 HTML / CSS
详解HTML5中的Communication API基本使用方法
2016/01/29 HTML / CSS
Paradigit比利时电脑卖场:购买笔记本、电脑、平板和外围设备
2016/11/28 全球购物
锐步美国官方网站:Reebok美国
2018/01/10 全球购物
儿科护士自我鉴定
2013/10/14 职场文书
行政文员实习自我鉴定范文
2014/09/14 职场文书
党的群众路线教育实践活动对照检查材料(教师)
2014/09/24 职场文书
老公给老婆的检讨书(精华篇)
2014/10/18 职场文书
小学三年级语文教学反思
2016/03/03 职场文书
辞职申请书范本
2019/05/20 职场文书
Oracle设置DB、监听和EM开机启动的方法
2021/04/25 Oracle
Python使用DFA算法过滤内容敏感词
2022/04/22 Python
php解析非标准json、非规范json的方式实例
2022/05/10 PHP