基于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中“+”的陷阱深刻理解
Dec 04 Javascript
解析js中获得父窗口链接getParent方法以及各种打开窗口的方法
Jun 19 Javascript
jQuery之DOM对象和jQuery对象的转换与区别分析
Jan 08 Javascript
Vue.js绑定HTML class数组语法错误的原因分析
Oct 19 Javascript
Vue响应式原理深入解析及注意事项
Dec 11 Javascript
全面介绍vue 全家桶和项目实例
Dec 27 Javascript
JS正则表达式常见用法实例详解
Jun 19 Javascript
微信小程序日期选择器实例代码
Jul 18 Javascript
浅析TypeScript 命名空间
Mar 19 Javascript
vue中路由跳转不计入history的操作
Sep 21 Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
Oct 30 Javascript
如何在vue中使用video.js播放m3u8格式的视频
Feb 01 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
咖啡豆要不要放冰箱的原因
2021/03/04 冲泡冲煮
php使用cookie实现记住用户名和密码实现代码
2015/04/27 PHP
PHP使用fopen与file_get_contents读取文件实例分享
2016/03/04 PHP
PHP标准库 (SPL)――Countable用法示例
2020/06/05 PHP
JS中==与===操作符的比较
2009/03/21 Javascript
parseInt parseFloat js字符串转换数字
2010/08/01 Javascript
jquery鼠标滑过提示title具体实现代码
2013/08/06 Javascript
js 上下左右键控制焦点(示例代码)
2013/12/14 Javascript
页面实时更新时间的JS实例代码
2013/12/18 Javascript
防止登录页面出现在frame中js代码
2014/07/22 Javascript
深入浅析JS Function()构造函数
2016/08/22 Javascript
jQuery实现获取元素索引值index的方法
2016/09/18 Javascript
详解Nodejs 通过 fs.createWriteStream 保存文件
2017/10/10 NodeJs
详解如何在angular2中获取节点
2017/11/23 Javascript
微信小程序wx.navigateTo方法里的events参数使用详情及场景
2020/01/07 Javascript
vue-router重写push方法,解决相同路径跳转报错问题
2020/08/07 Javascript
[00:48]DOTA2国际邀请赛公开赛报名开始 扫码开启逐梦之旅
2018/06/06 DOTA
python实现批量监控网站
2016/09/09 Python
Python使用random.shuffle()打乱列表顺序的方法
2018/11/08 Python
python返回数组的索引实例
2019/11/28 Python
python对象销毁实例(垃圾回收)
2020/01/16 Python
Python 实现网课实时监控自动签到、打卡功能
2020/03/12 Python
Python 开发工具通过 agent 代理使用的方法
2020/09/27 Python
CSS3 text-shadow实现文字阴影效果
2016/02/24 HTML / CSS
玩具反斗城西班牙网上商城:ToysRUs西班牙
2017/01/19 全球购物
泰国健康和美容服务预订网站:GoWabi
2019/06/03 全球购物
PHP高级工程师面试问题推荐
2013/01/18 面试题
家长对孩子的感言
2014/03/10 职场文书
如何写自我鉴定
2014/03/19 职场文书
党员自我剖析材料(群众路线)
2014/10/06 职场文书
机关干部四风问题自我剖析及整改措施
2014/10/26 职场文书
党员剖析材料范文
2014/12/18 职场文书
兴趣班停课通知
2015/04/24 职场文书
2015年幼儿教育工作总结
2015/07/24 职场文书
2016年六一儿童节开幕词
2016/03/04 职场文书
怎样写好工作计划
2019/04/10 职场文书