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同意等待代码实现心得
Jan 01 Javascript
JQuery循环滚动图片代码
Dec 08 Javascript
使用jquery动态加载javascript以减少服务器压力
Oct 29 Javascript
文本域中换行符的替换示例
Mar 04 Javascript
红米手机抢购的js代码
Mar 10 Javascript
javascript中clone对象详解
Dec 03 Javascript
Jquery实现textarea根据文本内容自适应高度
Apr 03 Javascript
jquery实现简单的二级导航下拉菜单效果
Sep 07 Javascript
基于jQuery实现滚动切换效果
Dec 02 Javascript
JQuery ZTree使用方法详解
Jan 07 Javascript
vue 使用axios 数据请求第三方插件的使用教程详解
Jul 05 Javascript
微信小程序绘制半圆(弧形)进度条
Nov 18 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
德劲1103的维修打理经验
2021/03/02 无线电
从康盛产品(discuz)提取出来的模板类
2011/06/28 PHP
Yii2组件之多图上传插件FileInput的详细使用教程
2016/06/20 PHP
Yii2实现自定义独立验证器的方法
2017/05/05 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
ExtJS实现文件下载的方法实例
2013/11/09 Javascript
jquery中load方法的用法及注意事项说明
2014/02/22 Javascript
javascript实现行拖动的方法
2015/05/27 Javascript
jquery结婚电子请柬特效源码分享
2015/08/21 Javascript
js中对函数设置默认参数值的3种方法
2015/10/23 Javascript
JavaScript第一篇之实现按钮全选、功能
2016/08/21 Javascript
JavaScript事件用法浅析
2016/10/31 Javascript
javascript实现滑动解锁功能
2017/03/22 Javascript
ES6新特性之类(Class)和继承(Extends)相关概念与用法分析
2017/05/24 Javascript
node.js 发布订阅模式的实例
2017/09/10 Javascript
详解处理bootstrap4不支持远程静态框问题
2018/07/20 Javascript
js实现input密码框显示/隐藏功能
2020/09/10 Javascript
详解jQuery设置内容和属性
2019/04/11 jQuery
vue-cli 为项目设置别名的方法
2019/10/15 Javascript
VUE+elementui组件在table-cell单元格中绘制微型echarts图
2020/04/20 Javascript
使用Python3中的gettext模块翻译Python源码以支持多语言
2015/03/31 Python
Python中生成器和yield语句的用法详解
2015/04/17 Python
Python实现多线程抓取妹子图
2015/08/08 Python
用Python实现斐波那契(Fibonacci)函数
2016/03/25 Python
Python实现时钟显示效果思路详解
2018/04/11 Python
Python爬虫包BeautifulSoup简介与安装(一)
2018/06/17 Python
Python中常用的os操作汇总
2020/11/05 Python
全面解析HTML5中的标准属性与自定义属性
2016/02/18 HTML / CSS
HTML5事件方法全部汇总
2016/05/12 HTML / CSS
研究生求职推荐信范文
2013/11/30 职场文书
学生周末回家住宿长期请假条
2014/02/15 职场文书
党建工作先进材料
2014/05/02 职场文书
师德师风剖析材料
2014/09/30 职场文书
企业年检委托书范本
2014/10/14 职场文书
杜甫草堂导游词
2015/02/03 职场文书
《角的初步认识》教学反思
2016/02/17 职场文书