基于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 相关文章推荐
javascript下arguments,caller,callee,call,apply示例及理解
Dec 24 Javascript
js格式化时间和js格式化时间戳示例
Feb 10 Javascript
JavaScript使用replace函数替换字符串的方法
Apr 06 Javascript
BootStrap数据表格实例代码
Sep 13 Javascript
深入浅析ES6 Class 中的 super 关键字
Oct 20 Javascript
使用Vue完成一个简单的todolist的方法
Dec 01 Javascript
Node.js readline模块与util模块的使用
Mar 01 Javascript
JS实现常见的查找、排序、去重算法示例
May 21 Javascript
react同构实践之实现自己的同构模板
Mar 13 Javascript
vue子路由跳转实现tab选项卡
Jul 24 Javascript
Vue.js watch监视属性知识点总结
Nov 11 Javascript
JQuery省市联动效果实现过程详解
May 08 jQuery
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(3)
2006/10/09 PHP
php类
2006/11/27 PHP
php检测网页是否被百度收录的函数代码
2013/10/09 PHP
浅谈PHP5.6 与 PHP7.0 区别
2019/10/09 PHP
jquery load()在firefox(火狐)下显示不正常的解决方法
2011/04/05 Javascript
使用jQuery jqPlot插件绘制柱状图
2014/12/18 Javascript
jquery简单实现幻灯片的方法
2015/08/03 Javascript
JavaScript自学笔记(必看篇)
2016/06/23 Javascript
Extjs让combobox写起来简洁又漂亮
2017/01/05 Javascript
js时间戳和c#时间戳互转方法(推荐)
2017/02/15 Javascript
ES6中Math对象新增的方法实例详解
2017/04/25 Javascript
jQuery动态追加页面数据以及事件委托详解
2017/05/06 jQuery
Vue 多层组件嵌套二种实现方式(测试实例)
2017/09/08 Javascript
基于 Vue 实现一个酷炫的 menu插件
2017/11/14 Javascript
VUE2.0中Jsonp的使用方法
2018/05/22 Javascript
vue2.0项目集成Cesium的实现方法
2019/07/30 Javascript
浅析Python的web.py框架中url的设定方法
2016/07/11 Python
Python中的defaultdict与__missing__()使用介绍
2018/02/03 Python
Python3 实现随机生成一组不重复数并按行写入文件
2018/04/09 Python
解决Pycharm 包已经下载,但是运行代码提示找不到模块的问题
2019/08/31 Python
使用python实现画AR模型时序图
2019/11/20 Python
使用Python实现 学生学籍管理系统
2019/11/26 Python
浅析rem和em和px vh vw和% 移动端长度单位
2016/04/28 HTML / CSS
Canvas 文本填充线性渐变的使用详解
2020/06/22 HTML / CSS
海信商城:海信电视、科龙空调、容声冰箱官方专卖
2017/02/07 全球购物
性能服装:HYLETE
2018/08/14 全球购物
Bulk Powders意大利:运动补充在线商店
2019/02/09 全球购物
META-INF文件夹中的MANIFEST.MF的作用
2016/06/21 面试题
爱心活动计划书
2014/04/26 职场文书
酒店员工培训方案
2014/06/02 职场文书
主题团日活动总结
2014/06/25 职场文书
2014年图书室工作总结
2014/12/09 职场文书
经理聘任证明
2015/03/02 职场文书
教师素质教育心得体会
2016/01/19 职场文书
Win10/Win11 任务栏替换成经典样式
2022/04/19 数码科技
Valheim服务器 Mod修改安装教程 【ValheimPlus】
2022/12/24 Servers