基于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 相关文章推荐
Prototype使用指南之range.js
Jan 10 Javascript
理解Javascript_01_理解内存分配原理分析
Oct 11 Javascript
jQuery Tab插件 用于在Tab中显示iframe,附源码和详细说明
Jun 27 Javascript
点击隐藏页面左栏或右栏实现js代码
Apr 01 Javascript
鼠标拖动实现DIV排序示例代码
Oct 14 Javascript
浅谈JavaScript 标准对象
Jun 02 Javascript
前端axios下载excel文件(二进制)的处理方法
Jul 31 Javascript
利用jqgrid实现上移下移单元格功能
Nov 07 Javascript
vue-cli history模式实现tomcat部署报404的解决方式
Sep 06 Javascript
详解Vue中的Props与Data细微差别
Mar 02 Javascript
原生JavaScript实现购物车
Jan 10 Javascript
vue-resource 拦截器interceptors使用详解
Jan 18 Vue.js
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编写PDF文档生成器
2006/10/09 PHP
PHP删除非空目录的函数代码小结
2013/02/28 PHP
yii框架builder、update、delete使用方法
2014/04/30 PHP
php单态设计模式(单例模式)实例
2014/11/18 PHP
PHP耦合设计模式实例分析
2018/08/08 PHP
LBS blog sql注射漏洞[All version]-官方已有补丁
2007/08/26 Javascript
一些常用的JS功能函数代码
2009/06/23 Javascript
XmlUtils JS操作XML工具类
2009/10/01 Javascript
js操作二级联动实现代码
2010/07/27 Javascript
文本框倒叙输入让输入框的焦点始终在最开始的位置
2014/09/01 Javascript
JavaScript中数组成员的添加、删除介绍
2014/12/30 Javascript
JavaScript中的this关键字使用方法总结
2015/03/13 Javascript
jquery滚动特效集锦
2015/06/03 Javascript
简单介绍JavaScript的变量和数据类型
2015/06/03 Javascript
bootstrap手风琴制作方法详解
2017/01/11 Javascript
基于js 字符串indexof与search方法的区别(详解)
2017/12/04 Javascript
JavaScript中 ES6变量的结构赋值
2018/07/10 Javascript
Vue项目引发的「过滤器」使用教程
2019/03/12 Javascript
javascript刷新父页面方法汇总详解
2019/10/10 Javascript
JavaScript实现京东放大镜效果
2019/12/03 Javascript
使用cx_freeze把python打包exe示例
2014/01/24 Python
Python易忽视知识点小结
2015/05/25 Python
Python实现的摇骰子猜大小功能小游戏示例
2017/12/18 Python
python 在指定范围内随机生成不重复的n个数实例
2019/01/28 Python
python GUI库图形界面开发之PyQt5窗口布局控件QStackedWidget详细使用方法
2020/02/27 Python
Pyqt助手安装PyQt5帮助文档过程图解
2020/11/20 Python
一款纯css3实现的动画加载导航
2014/10/08 HTML / CSS
HTML5中meta属性的使用方法
2016/02/29 HTML / CSS
美国领先的家庭智能音响系统品牌:Sonos
2018/07/20 全球购物
普通PHP程序员笔试题
2016/01/01 面试题
枚举与#define宏的区别
2014/04/30 面试题
Lucene推荐的分页方式是什么?
2015/12/07 面试题
申报职称专业技术个人的自我评价
2013/12/12 职场文书
小学优秀班集体申报材料
2014/05/25 职场文书
小学家庭教育心得体会
2016/01/14 职场文书
SQL Server表分区删除详情
2021/10/16 SQL Server