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写的日历类(基于pj)
Dec 28 Javascript
网页源代码保护(禁止右键、复制、另存为、查看源文件)
May 23 Javascript
基于jquery的时间段实现代码
Aug 02 Javascript
js 输出内容到新窗口具体实现代码
May 31 Javascript
jQuery教程 $()包装函数来实现数组元素分页效果
Aug 13 Javascript
深入解析JavaScript的闭包机制
Oct 20 Javascript
JS 通过系统时间限定动态添加 select option的实例代码
Jun 09 Javascript
JS中的hasOwnProperty()和isPrototypeOf()属性实例详解
Aug 11 Javascript
JS实现PC手机端和嵌入式滑动拼图验证码三种效果
Feb 15 Javascript
vue动态循环出的多个select出现过的变为disabled(实例代码)
Nov 10 Javascript
微信小程序用canvas画图并分享
Mar 09 Javascript
微信小程序实现简单购物车功能
Dec 30 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
PHP4中实现动态代理
2006/10/09 PHP
PHP获取类中常量,属性,及方法列表的方法
2009/04/09 PHP
PHPMailer 中文使用说明小结
2010/01/22 PHP
PHP JSON格式数据交互实例代码详解
2011/01/13 PHP
ThinkPHP3.1新特性之G方法的使用
2014/06/19 PHP
PHP实现数组递归转义的方法
2014/08/28 PHP
在win7中搭建Linux+PHP 开发环境
2014/10/08 PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
2017/05/05 PHP
javascript div 弹出可拖动窗口
2009/02/26 Javascript
jQuery timers计时器简单应用说明
2010/10/28 Javascript
关于jQuery的inArray 方法介绍
2011/10/08 Javascript
javascript中如何处理引号编码&amp;#034;
2013/08/15 Javascript
js动态修改input输入框的type属性(实现方法解析)
2013/11/13 Javascript
jquery鼠标停止移动事件
2013/12/21 Javascript
js实现字符串转日期格式的方法
2015/05/20 Javascript
js实现黑色简易的滑动门网页tab选项卡效果
2015/08/31 Javascript
jQuery下拉菜单的实现代码
2016/11/03 Javascript
详解Angular的双向数据绑定(MV-VM)
2016/12/26 Javascript
详解bootstrap的modal-remote两种加载方式【强化】
2017/01/27 Javascript
如何在 Vue.js 中使用第三方js库
2017/04/25 Javascript
基于vue的短信验证码倒计时demo
2017/09/13 Javascript
node.js的http.createServer过程深入解析
2019/06/06 Javascript
python3使用pyqt5制作一个超简单浏览器的实例
2017/10/19 Python
python实现自动登录
2018/09/17 Python
Python可以实现栈的结构吗
2020/05/27 Python
Python学习之os模块及用法
2020/06/03 Python
PyQt5 QDockWidget控件应用详解
2020/08/12 Python
使用AJAX和Django获取数据的方法实例
2020/10/25 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
2020/12/01 Python
详解HTML5 Canvas绘制时指定颜色与透明度的方法
2016/03/25 HTML / CSS
html5实现滑块功能之type=&quot;range&quot;属性
2020/02/18 HTML / CSS
Amaze UI 文件选择域的示例代码
2020/08/26 HTML / CSS
网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?
2016/03/27 面试题
CSMA/CD介质访问控制协议
2015/11/17 面试题
高校优秀辅导员事迹材料
2014/05/07 职场文书
创业计划书详解
2019/07/19 职场文书