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带有索引按钮且自动轮播切换特效代码分享
Sep 15 Javascript
详解JavaScript的流程控制语句
Nov 30 Javascript
jquery点击改变class并toggle的实现代码
May 15 Javascript
js轮盘抽奖实例分析
Apr 17 Javascript
JavaScript SHA-256加密算法详细代码
Oct 06 Javascript
jQuery Validate验证框架详解(推荐)
Dec 17 Javascript
vue项目中做编辑功能传递数据时遇到问题的解决方法
Dec 19 Javascript
canvas实现粒子时钟效果
Feb 06 Javascript
layui问题之模拟select点击事件的实例讲解
Aug 15 Javascript
webpack打包非模块化js的方法
Oct 24 Javascript
在vue项目中使用codemirror插件实现代码编辑器功能
Aug 27 Javascript
详解Anyscript开发指南绕过typescript类型检查
Sep 23 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
php 中include()与require()的对比
2006/10/09 PHP
解析百度搜索结果link?url=参数分析 (全)
2012/10/09 PHP
thinkphp循环结构用法实例
2014/11/24 PHP
jQuery Autocomplete自动完成插件
2010/07/17 Javascript
jquery 缓存问题的几个解决方法
2013/11/11 Javascript
同域jQuery(跨)iframe操作DOM(实例讲解)
2013/12/19 Javascript
js 获取时间间隔实现代码
2014/05/12 Javascript
jQuery判断数组是否包含了指定的元素
2015/03/10 Javascript
javascript继承的六大模式小结
2015/04/13 Javascript
jquery使整个div区域可以点击的方法
2015/06/24 Javascript
JS+CSS实现带小三角指引的滑动门效果
2015/09/22 Javascript
Angular中使用$watch监听object属性值的变化(详解)
2017/04/24 Javascript
Vue组件通信的四种方式汇总
2018/02/08 Javascript
微信小程序开发常见问题及解决方案
2019/07/11 Javascript
Ant Design的Table组件去除
2020/10/24 Javascript
[02:05]2014DOTA2国际邀请赛 BBC外卡赛赛后总结
2014/07/09 DOTA
[04:22]DSPL第二期精彩集锦:残血反杀!
2014/12/10 DOTA
Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
2018/04/30 Python
Python读写及备份oracle数据库操作示例
2018/05/17 Python
python gensim使用word2vec词向量处理中文语料的方法
2019/07/05 Python
python使用itchat模块给心爱的人每天发天气预报
2019/11/25 Python
python七种方法判断字符串是否包含子串
2020/08/18 Python
Python如何急速下载第三方库详解
2020/11/02 Python
python Matplotlib基础--如何添加文本和标注
2021/01/26 Python
Steve Madden官网:美国鞋类品牌
2017/01/29 全球购物
美国最大的存储市场:SpareFoot
2018/07/23 全球购物
一套中级Java程序员笔试题
2015/01/14 面试题
学期评语大全
2014/04/30 职场文书
给市场的环保建议书
2014/05/14 职场文书
商业计算机应用专业自荐书
2014/06/09 职场文书
高中毕业典礼演讲稿
2014/09/09 职场文书
穷人该怎么创业?谨记以下几点
2019/07/11 职场文书
mysql多表查询-笔记七
2021/04/05 MySQL
ObjectMapper 如何忽略字段大小写
2021/06/29 Java/Android
索尼ICF-36收音机评测
2022/04/30 无线电
React自定义hook的方法
2022/06/25 Javascript