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中的Location地址对象
Jan 16 Javascript
js控制淡入淡出示例代码
Nov 12 Javascript
基于jQuery实现的旋转彩圈实例
Jun 26 Javascript
JavaScript实现cookie的写入、读取、删除功能
Nov 05 Javascript
js中substr,substring,indexOf,lastIndexOf,split,replace的用法详解
Nov 09 Javascript
jQuery 中的 DOM 操作
Apr 26 Javascript
vue+element-ui+ajax实现一个表格的实例
Mar 09 Javascript
jQuery删除/清空指定元素的所有子节点实例代码
Jul 04 jQuery
vue+element项目中过滤输入框特殊字符小结
Aug 07 Javascript
详解小程序如何改变onLoad的执行时机
Nov 01 Javascript
vue 开发企业微信整合案例分析
Dec 02 Javascript
VUE之图片Base64编码使用ElementUI组件上传
Apr 09 Vue.js
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数组函数知识汇总
2016/05/12 PHP
Fleaphp常见函数功能与用法示例
2016/11/15 PHP
php使用变量动态创建类的对象用法示例
2017/02/06 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
15款优秀的jQuery导航菜单插件分享
2011/07/19 Javascript
基于JQuery的类似新浪微博展示信息效果的代码
2012/07/23 Javascript
JavaScript实现的日期控件具体代码
2013/11/18 Javascript
jquery创建表格(自动增加表格)代码分享
2013/12/25 Javascript
jquery 使用简明教程
2014/03/05 Javascript
JavaScript中获取高度和宽度函数总结
2014/10/08 Javascript
JS基于VML技术实现的五角星礼花效果代码
2015/10/26 Javascript
Bootstrap学习系列之使用 Bootstrap Typeahead 组件实现百度下拉效果
2016/07/07 Javascript
vue.js打包之后可能会遇到的坑!
2018/06/03 Javascript
vue、react等单页面项目部署到服务器的方法及vue和react的区别
2018/09/29 Javascript
判断iOS、Android以及PC端的示例代码
2018/11/15 Javascript
javascript数组常见操作方法实例总结【连接、添加、删除、去重、排序等】
2019/06/13 Javascript
微信小程序实现动态列表项的顺序加载动画
2019/07/25 Javascript
使用JS实现动态时钟
2020/03/12 Javascript
python 调用HBase的简单实例
2016/12/18 Python
Python实现将16进制字符串转化为ascii字符的方法分析
2017/07/21 Python
python tkinter界面居中显示的方法
2018/10/11 Python
python协程之动态添加任务的方法
2019/02/19 Python
使用python实现男神女神颜值打分系统(推荐)
2019/10/31 Python
Windows系统下pycharm中的pip换源
2020/02/23 Python
Python configparser模块配置文件过程解析
2020/03/03 Python
基于Pyinstaller打包Python程序并压缩文件大小
2020/05/28 Python
在python3.64中安装pyinstaller库的方法步骤
2020/06/02 Python
Python3如何实现Win10桌面自动切换
2020/08/11 Python
详解用selenium来下载小姐姐图片并保存
2021/01/26 Python
应届毕业生个人自我评价
2013/09/20 职场文书
会计专业自荐信
2013/12/02 职场文书
《分一分》教学反思
2014/04/13 职场文书
习总书记三严三实学习心得体会
2014/10/13 职场文书
简历自我评价模板
2015/03/11 职场文书
2015年党建工作目标责任书
2015/05/08 职场文书
Python借助with语句实现代码段只执行有限次
2022/03/23 Python