当前位置: 首页 > news >正文

Vue3、Element Plus使用v-for循环el-form表单进行校验

在开发中遇到了这样一个需求

有一个form是通过v-for生成出来的,并且数量不确定,每个表单中的字段都需要做校验,就将自己的解决方法记录了下来。

在这里插入图片描述

在这里插入图片描述

完整代码如下

<template><div class="for-form"><el-button type="primary" @click="addHandle">新 增</el-button><div class="form-box"><div class="form-item" v-for="(item, index) in formList" :key="index"><el-form :model="item" :rules="rules" label-width="auto" style="max-width: 300px" label-position="top":ref="($event) => handle($event, index)"><el-form-item label="名称" prop="name"><el-input v-model="item.name" placeholder="请输入名称" /></el-form-item><el-form-item label="手机号" prop="phone"><el-input v-model="item.phone" placeholder="请输入手机号" /></el-form-item><el-form-item label="性别" prop="sex"><el-radio-group v-model="item.sex"><el-radio :value="1" size="small"></el-radio><el-radio :value="2" size="small"></el-radio></el-radio-group></el-form-item><el-form-item label="爱好" prop="hobby" v-if="item.sex == 2"><el-input v-model="item.hobby" placeholder="请输入爱好" /></el-form-item></el-form></div></div><el-button type="primary" @click="saveHandle">保 存</el-button></div>
</template><script setup lang="ts">
import { reactive, toRefs } from 'vue'const state = reactive({form: {} as any,formList: [] as any,rules: {name: [{ required: true, message: 'Please input Activity name', trigger: 'blur' },],},formRefs: [] as any
})const { formList, rules } = toRefs(state)function addHandle() {state.formList.push({name: "",phone: "",sex: 1,hobby: "",})
}function handle(e: any, index: any) {// 保存下每个refstate.formRefs[index] = e
}async function saveHandle() {let isSubmit: boolean[] = []// 循环上面记录下来的ref对每个进行校验for (const el of state.formRefs) {await el.validate((valid: any) => {// 每个 ref 校验成功或者失败都以布尔值存储下来if (valid) {isSubmit.push(true)} else {isSubmit.push(false)}})}// 只有当 isSubmit 存的值全是 true 时表示每个表单都校验成功了// 然后就可以提交了let has = isSubmit.every(i => i == true)if (has) {console.log("可以提交")}console.log(state.formRefs)console.log(isSubmit)
}</script><style scoped lang="scss">
.form-box {display: flex;align-items: flex-start;.form-item {margin-right: 20px;}
}
</style>

相关文章:

  • leetcode21 合并两个有序单链表
  • AI大佬都在说下一个爆点是智能体,建议开发者抢占先机!
  • java版Spring Cloud+Mybatis+Oauth2+分布式+微服务+实现工程管理系统
  • MaxKB-无需代码,30分钟创建基于大语言模型的本地知识库问答系统
  • QT QFileDialog文件选择对话框
  • 第7周作业——单片机定时器与串口通信的学习与应用
  • leetcode打卡#day45 携带研究材料(第七期模拟笔试)、518. 零钱兑换 II、377. 组合总和 Ⅳ、爬楼梯(第八期模拟笔试)
  • 概率论拾遗
  • 【DPDK学习路径】六、申请缓冲区内存池
  • 车载电子电气架构 - 智能座舱技术及功能应用
  • Docker部署私有仓库Harbor
  • 如何用Excel随机抽取幸运儿
  • 51.Python-web框架-Django开始第一个应用的增删改查
  • 代码随想录算法训练营Day42|1049.最后一块石头的重量II、494.目标和、474.一和零
  • js中函数执行
  • [笔记] php常见简单功能及函数
  • ➹使用webpack配置多页面应用(MPA)
  • 2018一半小结一波
  • Codepen 每日精选(2018-3-25)
  • export和import的用法总结
  • gf框架之分页模块(五) - 自定义分页
  • go语言学习初探(一)
  • Java多态
  • MySQL QA
  • PermissionScope Swift4 兼容问题
  • PHP的类修饰符与访问修饰符
  • Spark RDD学习: aggregate函数
  • spring-boot List转Page
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • uni-app项目数字滚动
  • vue:响应原理
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 欢迎参加第二届中国游戏开发者大会
  • 基于Android乐音识别(2)
  • 解决iview多表头动态更改列元素发生的错误
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 前端学习笔记之观察者模式
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 实现菜单下拉伸展折叠效果demo
  • 一道面试题引发的“血案”
  • 关于Android全面屏虚拟导航栏的适配总结
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 正则表达式-基础知识Review
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • ​一些不规范的GTID使用场景
  • # 飞书APP集成平台-数字化落地
  • #Java第九次作业--输入输出流和文件操作
  • #pragma once与条件编译
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (2)(2.10) LTM telemetry
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB