基于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 相关文章推荐
js和jquery批量绑定事件传参数一(新猪猪原创)
Jun 23 Javascript
终于解决了IE8不支持数组的indexOf方法
Apr 03 Javascript
javascript实现点击后变换按钮显示文字的方法
May 13 Javascript
javascript实现在线客服效果
Jul 15 Javascript
jquery UI Datepicker时间控件的使用方法(加强版)
Nov 07 Javascript
简单实现jQuery进度条轮播实例代码
Jun 20 Javascript
Jquery和BigFileUpload实现大文件上传及进度条显示
Jun 27 Javascript
微信小程序 教程之模板
Oct 18 Javascript
Vue.js第一天学习笔记(数据的双向绑定、常用指令)
Dec 01 Javascript
js验证手机号、密码、短信验证码代码工具类
Jun 24 Javascript
详解微信小程序-canvas绘制文字实现自动换行
Apr 26 Javascript
axios解决高并发的方法:axios.all()与axios.spread()的操作
Nov 09 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
PHP合并两个数组的两种方式的异同
2012/09/14 PHP
shell脚本作为保证PHP脚本不挂掉的守护进程实例分享
2013/07/15 PHP
php实现比较两个字符串日期大小的方法
2015/05/12 PHP
PHP xpath提取网页数据内容代码解析
2020/07/16 PHP
phpcmsv9.0任意文件上传漏洞解析
2020/10/20 PHP
IE iframe的onload方法分析小结
2010/01/07 Javascript
IE6中使用position导致页面变形的解决方案(js代码)
2011/01/09 Javascript
基于jquery的不规则矩形的排列实现代码
2012/04/16 Javascript
jQuery获取当前对象标签名称的方法
2014/02/07 Javascript
javascript中几个容易混淆的概念总结
2015/04/14 Javascript
jquery轮播的实现方式 附完整实例
2016/07/28 Javascript
js 将input框中的输入自动转化成半角大写(税号输入框)
2017/02/16 Javascript
Vue.js进行查询操作的实例详解
2017/08/25 Javascript
node.js利用mongoose获取mongodb数据的格式化问题详解
2017/10/06 Javascript
angularjs实现table增加tr的方法
2018/02/27 Javascript
Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用
2019/04/11 Javascript
layui 中select下拉change事件失效的解决方法
2019/09/20 Javascript
js实现简单选项卡制作
2020/08/05 Javascript
基于javascript实现移动端轮播图效果
2020/12/21 Javascript
[38:39]KG vs Mineski 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
[03:24][TI9纪实] Dota奶爸
2019/08/22 DOTA
Python使用Mechanize模块编写爬虫的要点解析
2016/03/31 Python
Windows下Eclipse+PyDev配置Python+PyQt4开发环境
2016/05/17 Python
python实现unicode转中文及转换默认编码的方法
2017/04/29 Python
Python实现求解括号匹配问题的方法
2018/04/17 Python
Pycharm新手教程(只需要看这篇就够了)
2019/06/18 Python
利用matplotlib实现根据实时数据动态更新图形
2019/12/13 Python
python解析xml文件方式(解析、更新、写入)
2020/03/05 Python
Alexandre Birman美国官网:亚历山大·伯曼
2019/10/30 全球购物
在购买印度民族服饰:Soch
2020/09/15 全球购物
关于礼仪的演讲稿
2014/01/04 职场文书
医学检验专业自荐信
2014/09/18 职场文书
2014年教育教学工作总结
2014/11/13 职场文书
毕业生评语大全
2015/01/04 职场文书
防溺水安全教育主题班会
2015/08/12 职场文书
物业管理交接协议书
2016/03/24 职场文书