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 相关文章推荐
js jquery做的图片连续滚动代码
Jan 06 Javascript
javascript中的继承实例代码
Apr 27 Javascript
Javascript创建自定义对象 创建Object实例添加属性和方法
Jun 04 Javascript
JQuery工具函数汇总
Jun 15 Javascript
javascript截图 jQuery插件imgAreaSelect使用详解
May 04 Javascript
最常见的左侧分类菜单栏jQuery实现代码
Nov 28 Javascript
Angular.js 4.x中表单Template-Driven Forms详解
Apr 25 Javascript
JavaScript 跨域之POST实现方法
May 07 Javascript
js实现全选反选不选功能代码详解
Apr 24 Javascript
node中使用log4js4.x版本记录日志的方法
Aug 20 Javascript
layui 图片上传+表单提交+ Spring MVC的实例
Sep 21 Javascript
基于vue和websocket的多人在线聊天室
Feb 01 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的历史和优缺点
2006/10/09 PHP
PHP 开源AJAX框架14种
2009/08/24 PHP
浅析php中常量,变量的作用域和生存周期
2013/08/10 PHP
php使用escapeshellarg时中文被过滤的解决方法
2016/07/10 PHP
Laravel统计一段时间间隔的数据方法
2019/10/09 PHP
jQuery中$.ajax()和$.getJson()同步处理详解
2015/08/12 Javascript
解决jQuery上传插件Uploadify出现Http Error 302错误的方法
2015/12/18 Javascript
详解Bootstrap四种图片样式
2016/01/04 Javascript
直接拿来用的页面跳转进度条JS实现
2016/01/06 Javascript
鼠标悬停小图标显示大图标
2016/01/22 Javascript
Jquery针对tr td的一些实用操作方法(必看篇)
2016/10/05 Javascript
js以及jquery实现手风琴效果
2020/04/17 Javascript
Vue iview-admin框架二级菜单改为三级菜单的方法
2018/07/03 Javascript
小程序scroll-view安卓机隐藏横向滚动条的实现详解
2019/05/16 Javascript
微信小程序-API接口安全详解
2019/07/16 Javascript
Vue.extend 编程式插入组件的实现
2019/11/18 Javascript
vue+ESLint 配置保存 自动格式化代码
2020/03/17 Javascript
Python设计足球联赛赛程表程序的思路与简单实现示例
2016/06/28 Python
Python实现购物程序思路及代码
2017/07/24 Python
Python2和Python3中print的用法示例总结
2017/10/25 Python
Python画柱状统计图操作示例【基于matplotlib库】
2018/07/04 Python
opencv实现图片模糊和锐化操作
2018/11/19 Python
快速解决vue.js 模板和jinja 模板冲突的问题
2019/07/26 Python
Python+OpenCV 实现图片无损旋转90°且无黑边
2019/12/12 Python
Python打开文件、文件读写操作、with方式、文件常用函数实例分析
2020/01/07 Python
python GUI库图形界面开发之PyQt5工具栏控件QToolBar的详细使用方法与实例
2020/02/28 Python
Pandas DataFrame求差集的示例代码
2020/12/13 Python
python实现发送QQ邮件(可加附件)
2020/12/23 Python
CSS3 滤镜 webkit-filter详细介绍及使用方法
2012/12/27 HTML / CSS
优秀员工年终发言演讲稿
2014/01/01 职场文书
妈妈的账单教学反思
2014/02/06 职场文书
《大江保卫战》教学反思
2014/04/11 职场文书
校园学雷锋广播稿
2014/10/08 职场文书
捐款仪式主持词
2015/07/04 职场文书
Windows 11上手初体验:任务栏和开始菜单等迎来大改
2021/11/21 数码科技
Python进程间的通信之语法学习
2022/04/11 Python