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 相关文章推荐
jQuery EasyUI API 中文文档 - Dialog对话框
Nov 15 Javascript
js控制的遮罩层实例介绍
May 29 Javascript
ComboBox 和 DateField 在IE下消失的解决方法
Aug 30 Javascript
addEventListener()第三个参数useCapture (Boolean)详细解析
Nov 07 Javascript
通过遮罩层实现浮层DIV登录的js代码
Feb 07 Javascript
JavaScript基于setTimeout实现计数的方法
May 08 Javascript
JS给Array添加是否包含字符串的简单方法
Oct 29 Javascript
详解angular中通过$location获取路径(参数)的写法
Mar 21 Javascript
微信小程序实现缓存根据不同的id来进行设置和读取缓存
Jun 12 Javascript
解决Mac node版本升级失败的问题
May 16 Javascript
微信小程序实现收藏与取消收藏切换图片功能
Aug 03 Javascript
vue实现移动端轻量日期组件不依赖第三方库的方法
Apr 28 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中利用str_pad函数生成数字递增形式的产品编号
2013/09/30 PHP
PHP在线书签系统分享
2016/01/04 PHP
jQuery.autocomplete 支持中文输入(firefox)修正方法
2011/03/10 Javascript
GRID拖拽行的实例代码
2013/07/18 Javascript
javascript数组快速打乱重排的方法
2014/01/02 Javascript
使用JS或jQuery模拟鼠标点击a标签事件代码
2014/03/10 Javascript
深入理解javascript构造函数和原型对象
2014/09/23 Javascript
JavaScript中数据结构与算法(四):串(BF)
2015/06/19 Javascript
js实现人民币大写金额形式转换
2016/04/27 Javascript
微信小程序 Page()函数详解
2016/10/17 Javascript
微信开发 使用picker封装省市区三级联动模板
2016/10/28 Javascript
前端构建工具之gulp的语法教程
2017/06/12 Javascript
JS实现按钮控制计时开始和停止功能
2017/07/27 Javascript
Angular CLI在Angular项目中如何使用scss详解
2018/04/10 Javascript
layer提示框添加多个按钮选择的实例
2019/09/12 Javascript
关于vue项目中搜索节流的实现代码
2019/09/17 Javascript
vue登录页实现使用cookie记住7天密码功能的方法
2021/02/18 Vue.js
[02:41]2015国际邀请赛中国区预选赛观战指南
2015/05/20 DOTA
使用Python脚本将绝对url替换为相对url的教程
2015/04/24 Python
Python实现将xml导入至excel
2015/11/20 Python
python实现公司年会抽奖程序
2019/01/22 Python
Python读写csv文件流程及异常解决
2020/10/20 Python
python实现图片,视频人脸识别(opencv版)
2020/11/18 Python
HTML 5.1来了 9月份正式发布 更新内容预览
2016/04/26 HTML / CSS
一家外企的面试题目(C/C++面试题,C语言面试题)
2014/03/24 面试题
公司出纳岗位职责
2013/12/07 职场文书
益达广告词
2014/03/14 职场文书
对祖国的寄语大全
2014/04/11 职场文书
基层党员群众路线教育实践活动个人对照检查材料思想汇报
2014/10/05 职场文书
2014年学校食堂工作总结
2014/11/25 职场文书
2015年科室工作总结
2015/04/10 职场文书
幸福终点站观后感
2015/06/04 职场文书
四年级作文之植物
2019/09/20 职场文书
导游词之湖北梁子湖
2019/11/07 职场文书
简单实现一个手持弹幕功能+文字抖动特效
2021/03/31 HTML / CSS
详解pytorch创建tensor函数
2022/03/22 Python