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 相关文章推荐
javascript 写类方式之八
Jul 05 Javascript
JavaScript 权威指南(第四版) 读书笔记
Aug 11 Javascript
JS 加入收藏夹的代码(主流浏览器通用)
May 13 Javascript
纯Javascript实现Windows 8 Metro风格实现
Oct 15 Javascript
页面按钮禁用与解除禁用的方法
Feb 19 Javascript
DOM基础教程之事件类型
Jan 20 Javascript
javascript文本模板用法实例
Jul 31 Javascript
微信小程序 框架详解及实例应用
Sep 26 Javascript
Vue项目中配置pug解析支持
May 10 Javascript
JavaScript使用canvas绘制随机验证码
Feb 17 Javascript
JavaScript实现tab栏切换效果
Mar 16 Javascript
绘制微信小程序验证码功能的实例代码
Jan 05 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中两种缩放图片的函数,为图片添加水印
2013/06/14 PHP
php插入排序法实现数组排序实例
2015/02/16 PHP
详解WordPress中添加友情链接的方法
2016/05/21 PHP
php封装的验证码工具类完整实例
2016/10/19 PHP
js 小数取整的函数
2010/05/10 Javascript
JavaScript高级程序设计 学习笔记 js高级技巧
2011/09/20 Javascript
Prototype源码浅析 String部分(三)之HTML字符串处理
2012/01/15 Javascript
JS事件在IE与FF中的区别详细解析
2013/11/20 Javascript
让jQuery与其他JavaScript库并存避免冲突的方法
2013/12/23 Javascript
对Jquery中的ajax再封装,简化操作示例
2014/02/12 Javascript
jquery操作select大全
2014/04/25 Javascript
js实现弹出窗口、页面变成灰色并不可操作的例子分享
2014/05/10 Javascript
jquery中页面Ajax方法$.load的功能使用介绍
2014/10/20 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
深入理解 JavaScript 中的 JSON
2017/04/06 Javascript
基于Node.js模板引擎教程-jade速学与实战1
2017/09/17 Javascript
js实现轮播图的完整代码
2020/10/26 Javascript
微信小程序适配iphoneX的实现方法
2018/09/18 Javascript
js canvas实现画图、滤镜效果
2018/11/27 Javascript
利用Python和OpenCV库将URL转换为OpenCV格式的方法
2015/03/27 Python
Python3中编码与解码之Unicode与bytes的讲解
2019/02/28 Python
Python 50行爬虫抓取并处理图灵书目过程详解
2019/09/20 Python
python统计字符串中字母出现次数代码实例
2020/03/02 Python
基于CSS3实现的几个小loading效果
2018/09/27 HTML / CSS
目前不被任何主流浏览器支持的CSS3属性汇总
2014/07/21 HTML / CSS
安德玛菲律宾官网:Under Armour菲律宾
2020/07/28 全球购物
Overload和Override的区别
2012/09/02 面试题
大学生创业计划书的格式要求
2013/12/29 职场文书
美发活动策划书
2014/01/14 职场文书
十八届三中全会宣传方案
2014/02/21 职场文书
工程安全生产协议书
2014/11/21 职场文书
劳资员岗位职责
2015/02/13 职场文书
《葡萄沟》教学反思
2016/02/23 职场文书
用python自动生成日历
2021/04/24 Python
PHP设计模式(观察者模式)
2021/07/07 PHP
win10滚动条自动往上跑怎么办?win10滚动条自动往上跑的解决方法
2022/08/05 数码科技