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四舍五入Math.round()与Math.pow()使用介绍
Dec 27 Javascript
javascript正则表达式参数/g与/i及/gi的使用指南
Aug 27 Javascript
javascript感应鼠标图片透明度显示的方法
Feb 24 Javascript
详解AngularJS中的作用域
Jun 17 Javascript
使用JQuery实现的分页插件分享
Nov 05 Javascript
深入理解JavaScript中的并行处理
Sep 22 Javascript
微信小程序 Record API详解及实例代码
Sep 30 Javascript
详解Vue中添加过渡效果
Mar 20 Javascript
动态加载、移除js/css文件的示例代码
Mar 20 Javascript
JavaScript选择排序算法原理与实现方法示例
Aug 06 Javascript
element-ui upload组件多文件上传的示例代码
Oct 17 Javascript
微信小程序在地图选择地址并返回经纬度简单示例
Dec 03 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
详解js异步文件加载器
2016/01/24 PHP
XHProf报告字段含义的解析
2016/05/17 PHP
Jquery升级新版本后选择器的语法问题
2010/06/02 Javascript
javascript中的startWith和endWith的几种实现方法
2013/05/07 Javascript
实用的Jquery选项卡TAB示例代码
2013/08/28 Javascript
js取值中form.all和不加all的区别介绍
2014/01/20 Javascript
JS制作简单的三级联动
2015/03/18 Javascript
js获取滚动距离的方法
2015/05/30 Javascript
AngularJS中监视Scope变量以及外部调用Scope方法
2016/01/23 Javascript
深入剖析JavaScript:Object类型
2016/05/10 Javascript
浅谈js中test()函数在正则中的使用
2016/08/19 Javascript
微信小程序实现下拉刷新和轮播图效果
2017/11/21 Javascript
超好用的jQuery分页插件jpaginate用法示例【附源码下载】
2018/12/06 jQuery
Vue2.x Todo之自定义指令实现自动聚焦的方法
2019/01/08 Javascript
利用node 判断打开的是文件 还是 文件夹的实例
2019/06/10 Javascript
javascript中的闭包概念与用法实践分析
2019/07/26 Javascript
使用vue3重构拼图游戏的实现示例
2021/01/25 Vue.js
Python字符遍历的艺术
2008/09/06 Python
Python实现端口复用实例代码
2014/07/03 Python
Python使用ftplib实现简易FTP客户端的方法
2015/06/03 Python
解决pycharm 工具栏Tool中找不到Run manager.py Task的问题
2019/07/01 Python
Python+OpenCv制作证件图片生成器的操作方法
2019/08/21 Python
Django框架 查询Extra功能实现解析
2019/09/04 Python
Python 面向对象之封装、继承、多态操作实例分析
2019/11/21 Python
python中把元组转换为namedtuple方法
2020/12/09 Python
深入理解css属性的选择对动画性能的影响
2016/04/20 HTML / CSS
HTML5 解析规则分析
2009/08/14 HTML / CSS
新闻编辑自荐信
2013/11/03 职场文书
如何写毕业求职自荐信
2013/11/06 职场文书
实习教师个人的自我评价
2013/11/08 职场文书
校园文化标语
2014/06/18 职场文书
工作目标责任书
2014/07/23 职场文书
领导班子群众路线与四风问题对照检查材料思想汇报
2014/10/11 职场文书
2015年学校德育工作总结
2015/04/22 职场文书
宾馆安全管理制度
2015/08/06 职场文书
详细介绍python类及类的用法
2021/05/31 Python