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 相关文章推荐
extjs grid取到数据而不显示的解决
Dec 29 Javascript
javascript 模拟JQuery的Ready方法实现并出现的问题
Dec 06 Javascript
javascript模版引擎-tmpl的bug修复与性能优化分析
Oct 23 Javascript
基于javascipt-dom编程 table对象的使用
Apr 22 Javascript
javascript实现根据3原色制作颜色选择器的方法
Jul 17 Javascript
js实现鼠标拖动功能
Mar 20 Javascript
vue2.0使用swiper组件实现轮播效果
Nov 27 Javascript
详解jQuery中的isPlainObject()使用方法
Feb 27 jQuery
浅析vue-router jquery和params传参(接收参数)$router $route的区别
Aug 03 jQuery
JavaScript常见事件处理程序实例总结
Jan 05 Javascript
使用watch在微信小程序中实现全局状态共享
Jun 03 Javascript
js数组的基本使用总结
Jan 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
PHP之COOKIE支持详解
2010/09/20 PHP
PHP删除数组中的特定元素的代码
2012/06/28 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
2014/10/24 PHP
php动态变量定义及使用
2015/06/10 PHP
smarty中常用方法实例总结
2015/08/07 PHP
使用php实现从身份证中提取生日
2016/05/09 PHP
Laravel框架实现redis集群的方法分析
2017/09/14 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
2019/12/11 PHP
PHP扩展安装方法步骤解析
2020/11/24 PHP
js对数字的格式化使用说明
2011/01/12 Javascript
基于jquery的代码显示区域自动拉长效果
2011/12/07 Javascript
上传图片预览JS脚本 Input file图片预览的实现示例
2014/10/23 Javascript
JavaScript实现添加及删除事件的方法小结
2015/08/04 Javascript
浅析js中substring和substr的方法
2015/11/09 Javascript
判断jQuery是否加载完成,没完成继续判断的解决方法
2017/12/06 jQuery
VUE接入腾讯验证码功能(滑块验证)备忘
2019/05/07 Javascript
VSCode launch.json配置详细教程
2020/06/18 Javascript
python操作MongoDB基础知识
2013/11/01 Python
python 七种邮件内容发送方法实例
2014/04/22 Python
Python GUI Tkinter简单实现个性签名设计
2018/06/19 Python
python 使用poster模块进行http方式的文件传输到服务器的方法
2019/01/15 Python
python中p-value的实现方式
2019/12/16 Python
Python线程条件变量Condition原理解析
2020/01/20 Python
Python3的socket使用方法详解
2020/02/18 Python
python检查目录文件权限并修改目录文件权限的操作
2020/03/11 Python
儿科护士自我鉴定
2013/10/14 职场文书
四年大学生活的个人自我评价
2013/12/11 职场文书
我的小天地教学反思
2014/04/30 职场文书
七夕相亲活动策划方案
2014/08/31 职场文书
机关副主任个人四风问题整改措施
2014/09/26 职场文书
2014幼儿园卫生保健工作总结
2014/12/05 职场文书
毕业设计论文致谢词
2015/05/14 职场文书
2016年安全月活动总结
2016/04/06 职场文书
CSS3实现的水平标题菜单
2021/04/14 HTML / CSS
MySQL中datetime时间字段的四舍五入操作
2021/10/05 MySQL
使用 MybatisPlus 连接 SqlServer 数据库解决 OFFSET 分页问题
2022/04/22 SQL Server