【踩坑】ElementUi中form组件的一些“坑”(注意事项or巧妙用法)

朱褒
• 阅读 990

前言

做项目用ElementUI组件的时候,因为有些业务需求,官方不可能有我们项目中业务所有的例子说明,所以在这里纪录了一下平常在写项目的时候遇到的一些问题。

一、form组件的 model 的数据类型必须是 Object

问题背景

有个这样的需求:做一个循环表单,表单的双向绑定的值应该就是一个数组,表单属性 :model 的值就需要写成 :model="类.数组" ,如果直接把数组赋给它,写成这样 :model="数组" 就会报错,如下图所示

【踩坑】ElementUi中form组件的一些“坑”(注意事项or巧妙用法)

正确示例

//数据
formData: {
    id: 1,
    name: '湖南师范大学',
    gradeList: [
      {
        id: 1,
        name: '一年级',
        classList: [
          {
            id: 1,
            name: '01班'
          },
          {
            id: 2,
            name: '02班级'
          }
        ]
      }
    ]
  }
<!-- form表单中model的值 formData 必须为 Object 类型 -->
  <el-form :model="formData" ref="ruleForm" label-width="100px" class="demo-ruleForm">
    <template v-for="(grade, index) in formData.gradeList">
      <el-form-item label="班级名字" :prop="'gradeList.' + index + '.name'"
        :rules="{required: true, message: '请输入年级',trigger: 'blur'}">
        <el-input v-model="grade.name"></el-input>
      </el-form-item>
    </template>
  </el-form>

二、循环表单中的表单验证问题

有时候有这样的需求:一个学校相关信息的输入表单里面嵌套着各个年级信息的表单(单层循环表单),一个年级里面又有多个班级信息的表单(多层嵌套表单),这个时候对里面的各个输入框做表单验证,该怎么做呢?
把prop属性里面的匹配写对就可以了,大致是下面这个写法:
//数据
formData: {
    id: 1,
    name: '湖南师范大学',
    gradeList: [
      {
        id: 1,
        name: '一年级',
        classList: [
          {
            id: 1,
            name: '01班'
          },
          {
            id: 2,
            name: '02班级'
          }
        ]
      }
    ]
  }

1、单层循环表单

 <!-- prop是这样写 :prop="'gradeList.' + index + '.name'" -->
  <el-form :model="formData" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
    <template v-for="(grade, index) in formData.gradeList">
      <el-form-item label="年级名字" :prop="'gradeList.' + index + '.name'"
        :rules="{required: true, message: '请输入年级',trigger: 'blur'}">
        <el-input v-model="grade.name"></el-input>
      </el-form-item>
    </template>
  </el-form>

2、双层循环表单

 <!-- 第二层的 :prop 是这样写 :prop="'gradeList.' + index + '.name'" -->
  <el-form :model="formData" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
    <template v-for="(grade, index) in formData.gradeList">
      <el-form-item label="年级名字" :prop="'gradeList.' + index + '.name'"
        :rules="{required: true, message: '请输入年级',trigger: 'blur'}">
        <el-input v-model="grade.name"></el-input>
      </el-form-item>
      <template v-for="(class, classIndex) in grade.classList">
        <el-form-item label="班级名字" :prop="'gradeList.' + index + '.classList.' + classIndex + '.name'"
          :rules="{required: true, message: '请输入班级',trigger: 'blur'}">
          <el-input v-model="class.name"></el-input>
        </el-form-item>
      </template>
    </template>
  </el-form>

依此类推,多层循环表单也可以按照双层循环表单中 prop 属性的格式来写。

如果有遇到组件中的其他问题或者注意事项可以在评论区留言,一起分享。

未完待续...

写在最后

我是AndyHu,目前暂时是一枚前端搬砖工程师。

文中如有错误,欢迎在评论区指正,如果这篇文章帮到了你,欢迎点赞和关注

让灵魂控制自己的皮囊才是真正的自由!!!

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
3年前
VBox 启动虚拟机失败
在Vbox(5.0.8版本)启动Ubuntu的虚拟机时,遇到错误信息:NtCreateFile(\\Device\\VBoxDrvStub)failed:0xc000000034STATUS\_OBJECT\_NAME\_NOT\_FOUND(0retries) (rc101)Makesurethekern
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
朱褒
朱褒
Lv1
多少年心如死灰换你回头让我心动
文章
3
粉丝
0
获赞
0