vue elementUI 表单校验的实现代码(多层嵌套)


Posted in Javascript onNovember 06, 2019

嵌套对象的校验

项目中使用的vue+elementUI进行开发,已经用了有一段时间了,感觉表单校验是每一个前端开发人员都避免不了的需求。在一些前端可以自行校验的情况下,先通过前端校验,校验不通过不发送请求,直到满足校验规则,再发送请求给后端,从而提升用户体验。

elementUI对表单的校验有自己的方法,要求传入model的必须为一个对象。但如果数据结构比较复杂,对象里面又嵌套对象,该如何校验?本文给出多层对象嵌套的方法。

example

<template>
 <el-form :model="formData" :rules="formRule" ref="formData" label-width="100px">
    <el-form-item prop="name" label="姓名">
      <el-input v-model="formData.name" ></el-input>
    </el-form-item>
    <el-form-item prop="password" label="密码">
     <el-input v-model="formData.password" ></el-input>
    </el-form-item>
    <el-form-item prop="user.tel" label="手机号" >
     <el-input v-model="formData.user.tel" ></el-input>
    </el-form-item>
    <el-form-item prop="phones[0].model" label="手机号">
     <el-input v-model="formData.phones[0].model"></el-input>
    </el-form-item>
    <el-form-item v-for="(phone, index) in formData.phones" :label="phone.brand" :key="phone.brand" :prop="'phones.' + index + '.model'" :rules="{
     required: true, message: 'model不能为空', trigger: 'blur'
     }">
      <el-input v-model="phone.model"></el-input>
      <el-form :model="formData.phones[index]" label-width="100px">
         <el-form-item v-for="(item, index1) in formData.phones[index].arr" :key="index1" :prop="'arr.' + index1 + '.data1'" label="data1" :rules="{
         required: true, message: 'data1不能为空', trigger: 'blur'
         }">
           <el-input v-model="item.data1"></el-input>
         </el-form-item>
      </el-form>
    </el-form-item>
  </el-form>
  <el-button @click="handleSubmit">提交</el-button>  
</template>
data () {
  return {
   formData:{
     name: '',
     password: '',
     user: {
       tel: ''
     },
      phones: [
       { brand: "华为", model: "", arr: [{ data1: "" }] },
       { brand: "小米", model: "", arr: [{ data1: "" }] }
     ] 
   },
   formRule:{
    name: [{required: true, message: '不能为空', trigger: 'blur'},
        {pattern: /^[\u4E00-\u9FA5]+$/, message: '用户名只能为中文', trigger: 'blur'}],
    password: [{required: true, message: '不能为空', trigger: 'blur'},
     {validator: Verify.validatePassword, trigger: 'blur'},
    ],
    'user.tel' : [{required: true, message: '手机号码不能为空', trigger: 'blur'}],
    'phones[0].model': [{required: true, message: 'model不能为空', trigger: 'blur'}],
   },
  }
 },

methods: {
  handleSubmit(){
    const t = this;
    t.$refs['formData'].validate((valid) => {
      if(valid){
       console.log(this.formData);
      }
    })
  }
 }

校验方法

model绑定的formData中内层user也是一个对象,现在想要对tel进行校验,在prop中传递user.tel,并且在rules中也要指定user.tel即可。

对于子对象里面又嵌套数组的数据结构,如果想校验数组里的元素,需要在写一层form,用子对象作为新form表单再重新走一遍流程即可,具体例子请看上面的代码

对于验证规则,可以通过pattern或者validator来实现,pattern里面可以直接写正则表达式,不知道为啥文档中没有提到这点。之前的验证一般都是通过validator来实现的,验证方法单独写在一个文件中,这样可以做到整个项目公用,用到时只需通过import引一下即可。

校验效果

vue elementUI 表单校验的实现代码(多层嵌套)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery获取ASP.NET服务器端控件dropdownlist和radiobuttonlist生成客户端HTML标签后的value和text值
Jun 28 Javascript
JavaScript游戏之优化篇
Nov 08 Javascript
TBCompressor js代码压缩
Jan 05 Javascript
一个页面元素appendchild追加到另一个页面元素的问题
Jan 27 Javascript
ext前台接收action传过来的json数据示例
Jun 17 Javascript
一个字符串反转函数可实现字符串倒序
Sep 15 Javascript
文本溢出插件jquery.dotdotdot.js使用方法详解
Jun 22 jQuery
详解vue父子组件间传值(props)
Jun 29 Javascript
vue.js声明式渲染和条件与循环基础知识
Jul 31 Javascript
Node.Js中实现端口重用原理详解
May 03 Javascript
iview同时验证多个表单问题总结
Sep 29 Javascript
微信小程序转发事件实现解析
Oct 22 Javascript
vue 解决computed修改data数据的问题
Nov 06 #Javascript
微信小程序页面渲染实现方法
Nov 06 #Javascript
微信小程序页面间传递数组对象方法解析
Nov 06 #Javascript
vue 获取及修改store.js里的公共变量实例
Nov 06 #Javascript
对vuex中getters计算过滤操作详解
Nov 06 #Javascript
node解析修改nginx配置文件操作实例分析
Nov 06 #Javascript
vuex实现像调用模板方法一样调用Mutations方法
Nov 06 #Javascript
You might like
蝙蝠侠:侠影之谜
2020/03/04 欧美动漫
如何修改和添加Apache的默认站点目录
2013/07/05 PHP
ThinkPHP框架整合微信支付之刷卡模式图文详解
2019/04/10 PHP
&amp;lt;script defer&amp;gt; defer 是什么意思
2009/05/10 Javascript
DOM和XMLHttpRequest对象的属性和方法整理
2012/01/04 Javascript
javascript模拟评分控件实现方法
2015/05/13 Javascript
js随机生成字母数字组合的字符串 随机动画数字
2015/09/02 Javascript
JQuery插件Marquee.js实现无缝滚动效果
2016/04/26 Javascript
iframe中使用jquery进行查找的方法【案例分析】
2016/06/17 Javascript
AngularJS 简单应用实例
2016/07/28 Javascript
纯前端JavaScript实现Excel IO案例分享
2016/08/26 Javascript
微信小程序手势操作之单触摸点与多触摸点
2017/03/10 Javascript
opencv 识别微信登录验证滑动块位置
2018/08/07 Javascript
JS加密插件CryptoJS实现AES加密操作示例
2018/08/16 Javascript
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
2018/08/24 Javascript
微信小程序地图导航功能实现完整源代码附效果图(推荐)
2019/04/28 Javascript
JavaScript 常见的继承方式汇总
2020/09/17 Javascript
Python 实现文件的全备份和差异备份详解
2016/12/27 Python
Python3实现简单可学习的手写体识别(实例讲解)
2017/10/21 Python
matplotlib中legend位置调整解析
2017/12/19 Python
解决Python2.7读写文件中的中文乱码问题
2018/04/12 Python
python正向最大匹配分词和逆向最大匹配分词的实例
2018/11/14 Python
python利用requests库模拟post请求时json的使用教程
2018/12/07 Python
Python django框架输入汉字,数字,字符生成二维码实现详解
2019/09/24 Python
简单了解Python多态与属性运行原理
2020/06/15 Python
Python configparser模块应用过程解析
2020/08/14 Python
50个强大璀璨的CSS3/JS技术运用实例
2010/02/27 HTML / CSS
使用HTML5做的导航条详细步骤
2020/10/19 HTML / CSS
介绍一下linux的文件权限
2012/02/15 面试题
秸秆管理实施方案
2014/03/15 职场文书
班主任对学生的评语
2014/04/26 职场文书
导游词之镇江西津古渡
2019/11/06 职场文书
红灯733-1型14管5波段半导体收音机
2021/04/22 无线电
php实现自动生成验证码的实例讲解
2021/11/17 PHP
Python字符串的转义字符
2022/04/07 Python
PostgreSQL数据库创建并使用视图以及子查询
2022/04/11 PostgreSQL