最近我们公司将前端框架由easyui 改为 vue+elementui 。自学vue两周 就开始了爬坑之路。业余时间给大家分享一下心得,技术新手加上第一次分享(小激动),有什么不足的地方欢迎大家指正,多多交流才能共同进步!

1.问题 我们公司的项目比较大 表格 表单的页面都不胜数 ,基于此封装了一些 可复用的代码。

2.分析  vue给了我们不一样的前端代码体验  element ui 给我们一套功能强大的组件 减少了我们大量的开发时间 。双剑合璧 天下无敌!  但每个公司的代码风格不同  用户的要求也比较刁端 ui团队设计完美 我们怎样才能用这个两把剑闯出自己的江湖 就需要大家好好琢磨了。

废话不多说!进入正题

form表单验证规则的封装 

1.ellementui的处理    1. Form 组件上一次性传递所有的验证规则  2 .单个的表单域上传递属性的验证规则 。

  1. <el-form :model="dynamicValidateForm" ref="dynamicValidateForm" label-width="100px" class="demo-dynamic">
  2. <el-form-item
  3. prop="email"
  4. label="邮箱"
  5. :rules="[
  6. { required: true, message: '请输入邮箱地址', trigger: 'blur' },
  7. { type: 'email', message: '请输入正确的邮箱地址', trigger: 'blur,change' }
  8. ]"
  9. >
  10. <el-input v-model="dynamicValidateForm.mobil"></el-input>
  11. </el-form-item>
  12. <el-form-item
  13. label="姓名:"
  14. prop="name"
  15. :rules="[{ required: true, message: '请输入姓名', trigger: 'blur' }]">
  16. <el-input v-model="dynamicValidateForm.name"></el-input>
  17. </el-form-item>
  18. <el-form-item label="手机号:" prop="mobil"
  19. :rules="filter_rules({required:true,type:'mobile'})">
  20. <el-input v-model="dynamicValidateForm.mobil"></el-input>
  21. </el-form-item>
  22.  
  23. </el-form>

观察上面的代码 有一个共性 单个的表单域上传递属性的验证规则 ,给rules 属性一个数组

重点来了 19行代码是什么意思????

 这就是我们封装的全局可复用的方法   传入需要的参数,你就可以得到你想要的验证规则 rules 数组

在我们的工具包建一个 js文件  我们的全局方法就有了

  1. exports.install = function (Vue, options) {
  2.  
  3. Vue.prototype.filter_rules = function (item){
  4.  
  5. return [{},{}]
  6.  
  7. }
  8.  
  9. }

还要在main.js 中注册 

下面分享下我的js文件

  1. import { validateMoneyNumber,qq,mobile,regexn,integer} from '@/utils/validate'
  2.  
  3. exports.install = function (Vue, options) {
  4.  
  5. /**
  6. * 注意: 定义type 规则时 不用做非空验证
  7. * 只需要传入 required:true 即可
  8. * */
  9. /*保留两位小数*/
  10. const isvalidateMoney = (rule, value, callback) => {
  11. if(value != null && value != "") {
  12. if(!validateMoneyNumber(value)) {
  13. callback(new Error('请输入正确的数字,最多保留两位小数!'))
  14. } else {
  15. callback()
  16. }
  17. }
  18. else{
  19. callback();
  20. }
  21. }
  22. /*验证QQ号码*/
  23. const isvalidateQQ= (rule, value, callback) => {
  24. if(value != null && value != "") {
  25. if(!qq(value)) {
  26. callback(new Error('您输入的QQ号不正确!'))
  27. } else {
  28. callback()
  29. }
  30. }
  31. else{
  32. callback();
  33. }
  34. }
  35. /*验证手机号*/
  36. const isvalidateMobile= (rule, value, callback) => {
  37. if(value != null && value != "") {
  38. if(!mobile(value)) {
  39. callback(new Error('您输入的手机号不正确!'))
  40. } else {
  41. callback()
  42. }
  43. }
  44. else{
  45. callback();
  46. }
  47. }
  48.  
  49. /*含有非法字符(只能输入字母、汉字)*/
  50. const isvalidateRegexn= (rule, value, callback) => {
  51. if(value != null && value != "") {
  52. if(!regexn(value)) {
  53. callback(new Error('含有非法字符(只能输入字母、汉字)!'))
  54. } else {
  55. callback()
  56. }
  57. }
  58. else{
  59. callback();
  60. }
  61. }
  62. /*请输入正整数*/
  63. const isvalidateInteger= (rule, value, callback) => {
  64. if(value != null && value != "") {
  65. if(!integer(value)) {
  66. callback(new Error('请输入正整数!'))
  67. } else {
  68. callback()
  69. }
  70. }
  71. else{
  72. callback();
  73. }
  74. }
  75.  
  76. /**
  77. * 参数 item
  78. * required true 必填项
  79. * maxLength 字符串的最大长度
  80. * min 和 max 必须同时给 min < max type=number
  81. * type 手机号 mobile
  82. * 邮箱 email
  83. * 网址 url
  84. * 各种自定义类型 定义在 src/utils/validate 中 持续添加中.......
  85. * */
  86.  
  87. Vue.prototype.filter_rules = function (item){
  88. let rules = [];
  89. if(item.required){
  90. rules.push({ required: true, message: '该输入项为必填项!', trigger: 'blur' });
  91. }
  92. if(item.maxLength){
  93. rules.push({ min:1,max:item.maxLength, message: '最多输入'+item.maxLength+'个字符!', trigger: 'blur' })
  94. }
  95. if(item.min&&item.max){
  96. rules.push({ min:item.min,max:item.max, message: '字符长度在'+item.min+'至'+item.max+'之间!', trigger: 'blur' })
  97. }
  98. if(item.type){
  99. let type = item.type;
  100. switch(type) {
  101. case 'email':
  102. rules.push({ type: 'email', message: '请输入正确的邮箱地址', trigger: 'blur,change' });
  103. break;
  104. case 'qq':
  105. rules.push( { validator: isvalidateQQ, trigger: 'blur,change' });
  106. break;
  107. case 'mobile':
  108. rules.push( { validator: isvalidateMobile, trigger: 'blur,change' });
  109. break;
  110. case 'regexn':
  111. rules.push( { validator: isvalidateRegexn, trigger: 'blur,change' });
  112. break;
  113. case 'integer':
  114. rules.push( { validator: isvalidateInteger, trigger: 'blur,change' });
  115. break;
  116. default:
  117. rule.push({});
  118. break;
  119. }
  120. }
  121.  
  122. return rules;
  123. };
  124. };

看明白了吗  第一行  是引入各种正则表达式   然后自定义校验规则    。  传入你自定义的参数 就可以拿到你想要的规则   (很熟悉吧  参考 easyui 表单验证)

下面是效果

欢迎来交流哦!

 

  

vue elementui form表单验证的更多相关文章

  1. vue element-UI Form表单验证

    摘自官网 https://element.eleme.cn/#/zh-CN/component/form 保证prop的值等于v-model的值,并且初始化值,这样验证才好使. 可以自定义验证 < ...

  2. element-ui Form表单验证

    element-ui Form表单验证规则全解 element的form表单非常好用,自带了验证规则,用起来很方便,官网给的案例对于一些普通场景完全没问题,不过一些复杂场景的验证还得自己多看文档摸索, ...

  3. elementUI form表单验证不通过的原因

    <el-form :model="form" :rules="rules"> <el-form-item prop="input&q ...

  4. Vue中Form表单验证无法消除验证问题

    iView的表单api给出了一个resetFields方法,用于重置整个表单输入的内容并清除验证提示. 但是有时候需要只消除部分的iview的resetFields方法源码是这样的resetField ...

  5. elementUI form表单验证不通过的三个原因

    <el-form :model="form" :rules="rules"> <el-form-item prop="input&q ...

  6. django之form表单验证

    django中的Form一般有两种功能: 输入html 验证用户输入 #!/usr/bin/env python # -*- coding:utf- -*- import re from django ...

  7. form表单验证-Javascript

    Form表单验证: js基础考试内容,form表单验证,正则表达式,blur事件,自动获取数组,以及css布局样式,动态清除等.完整代码如下: <!DOCTYPE html PUBLIC &qu ...

  8. python_way day19 HTML-day5 (form表单验证,CSRF,cookie,session,缓存)

    python-way day19 1. dJango的form表单验证 2.CSRF 跨站请求伪造 3.cookie,session 4.缓存 一,django表单验证功能 1.django验证基础: ...

  9. form表单验证2

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

随机推荐

  1. 使用阿里云docker加速器

    登陆之后,在docker镜像仓库-加速器可获得专有加速地址. 如何使用Docker加速器 针对Docker客户端版本大于1.10的用户 您可以通过修改daemon配置文件/etc/docker/dae ...

  2. Coding(码市)教程(一):基础配置

    作者:Adaaaagio 出处:http://www.cnblogs.com/zyx418 欢迎转载,希望能够帮到更多的人,转载也请保留这段申明,谢谢! 初识coding是在新入职的公司,前辈说我们用 ...

  3. 2065212Java实验四android开发基础

    20165212 Java实验四Android开发基础 实验内容: 1.基于Android Studio开发简单的Android应用并部署测试; 2.了解Android.组件.布局管理器的使用: 3. ...

  4. Linux内核调试

    1.控制台优先级配置cat /proc/sys/kernel/printk6 4 1 76是控制台的优先级,打印信息的优先级要比它高才能打印出.4是默认的优先级cat /var/log/message ...

  5. 安装 Android Studio 2.3 详细过程及错误解决

    因为要开发Android5.0的缘故,抛弃了eclipse转到了Android Studio,第一次使用就是遇到了许多问题,终于是解决问题了,特意写一篇博文给各位要准备从eclipse转到Androi ...

  6. 【转】Ubuntu13.04配置:Vim+Syntastic+Vundle+YouCompleteMe

    原文网址:http://www.cnblogs.com/csuftzzk/p/3435710.html 序言 使用Ubuntu和vim已经有一段时间了,对于Vim下的插件应用,我总是抱着一股狂热的态度 ...

  7. SQL中禁用trigger

    SQL中禁用所有trigger   编写人:CC阿爸 2014-6-15 在日常SQL数据库的操作中,如何快速的禁用所有trigger? --禁用某个表上的所有触发器 ALTER  

  8. Oracle.DataAccess.dll 部署安装

    Oracle.DataAccess.dll 要拷贝到项目发布目录 项目发布的时候,还必须要拷贝以下几个文件在运行目录1.oci.dll 2.oraociicus11.dll 3.OraOps11w.d ...

  9. [转]MVC 经验总结_序

    <appSettings> <add key="vs:EnableBrowserLink" value="false"/> </a ...

  10. RTNETLINK answers: File exists

    问题: 重启网络时报错如下 >>/etc/init.d/network start RTNETLINK answers: File exists 分析: /etc/init.d/netwo ...