基于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作用域和闭包
Sep 23 Javascript
JavaScript将数字转换成大写中文的方法
Mar 23 Javascript
javascript字符串替换函数如何一次性全部替换掉
Oct 30 Javascript
jQuery使用ajax跨域获取数据的简单实例
May 18 Javascript
JS 获取HTML标签内的子节点的方法
Sep 21 Javascript
简单实现JavaScript图片切换效果
Nov 28 Javascript
jQuery基于事件控制实现点击显示内容下拉效果
Mar 07 Javascript
JQuery 封装 Ajax 常用方法(推荐)
May 21 jQuery
Vue表单类的父子组件数据传递示例
May 03 Javascript
深入理解JS的事件绑定、事件流模型
May 13 Javascript
详解使用WebPack搭建React开发环境
Aug 06 Javascript
JS前端监控采集用户行为的N种姿势
Jul 23 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入门源程序
2006/10/09 PHP
php mongodb操作类 带几个简单的例子
2016/08/25 PHP
setTimeout和setInterval的浏览器兼容性分析
2007/02/27 Javascript
setTimeout的延时为0时多个浏览器的区别
2012/05/23 Javascript
js实现在文本框光标处添加字符的方法介绍
2012/11/24 Javascript
Extjs4 类的定义和扩展实例
2013/06/28 Javascript
用js模拟struts2的多action调用示例
2014/05/19 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
深入理解JavaScript系列(26):设计模式之构造函数模式详解
2015/03/03 Javascript
JavaScript实现的字符串replaceAll函数代码分享
2015/04/02 Javascript
Angular.JS中的指令引用template与指令当做属性详解
2017/03/30 Javascript
JavaScript表单验证实现代码
2017/05/22 Javascript
vue-resource 拦截器(interceptor)的使用详解
2017/07/04 Javascript
完美实现js拖拽效果 return false用法详解
2017/07/28 Javascript
vue2.0开发入门笔记之.vue文件的生成和使用
2017/09/19 Javascript
浅谈angular2路由预加载策略
2017/10/04 Javascript
nodejs环境使用Typeorm连接查询Oracle数据
2019/12/05 NodeJs
jQuery cookie的公共方法封装和使用示例
2020/06/01 jQuery
Python break语句详解
2014/03/11 Python
python实现class对象转换成json/字典的方法
2016/03/11 Python
python3使用smtplib实现发送邮件功能
2018/05/22 Python
在python中以相同顺序shuffle两个list的方法
2018/12/13 Python
如何基于python实现画不同品种的樱花树
2020/01/03 Python
Tensorflow训练MNIST手写数字识别模型
2020/02/13 Python
Python面向对象魔法方法和单例模块代码实例
2020/03/25 Python
Ray-Ban雷朋瑞典官方网站:全球领先的太阳眼镜品牌
2019/08/22 全球购物
阿联酋彩妆品牌:OUD MILANO
2019/10/06 全球购物
九年级英语教学反思
2014/01/31 职场文书
工商行政管理专业求职书
2014/05/23 职场文书
大专生找工作自荐书
2014/06/10 职场文书
纪律教育学习月活动总结
2014/08/27 职场文书
文明倡议书
2015/01/19 职场文书
总经理岗位职责
2015/02/04 职场文书
2015年八一建军节演讲稿
2015/03/19 职场文书
党员干部廉政承诺书
2015/04/28 职场文书
古诗文之爱国名句(77句)
2019/09/24 职场文书