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

vue3循环表单【以el-form组件为例】,如何校验所有表单,所有表单校验通过后提交

1.循环时,在组件标签上使用ref绑定组件实例

3.如何校验所有表单都通过后方可提交?利用promise.all()判断

代码如下:

<template>
  <div>
    <!-- 循环渲染表单 -->
    <el-form
      v-for="(formItem, index) in formList"
      :key="index"
      :model="formItem"
      :rules="rules"
      ref="formRefs"
      class="dynamic-form"
    >
      <el-form-item label="姓名" prop="name">
        <el-input v-model="formItem.name"></el-input>
      </el-form-item>
      <el-form-item label="年龄" prop="age">
        <el-input v-model.number="formItem.age"></el-input>
      </el-form-item>
      <el-form-item label="邮箱" prop="email">
        <el-input v-model="formItem.email"></el-input>
      </el-form-item>
    </el-form>

    <el-button type="primary" @click="submitForms">提交</el-button>
  </div>
</template>

<script setup>
import { ref, reactive } from 'vue'
import { ElMessage } from 'element-plus'

const formList = reactive([
  { name: '', age: '', email: '' },
  { name: '', age: '', email: '' }
])

const rules = {
  name: [
    { required: true, message: '请输入姓名', trigger: 'blur' }
  ],
  age: [
    { required: true, message: '请输入年龄', trigger: 'blur' },
    { type: 'number', message: '年龄必须是数字', trigger: 'blur' }
  ],
  email: [
    { required: true, message: '请输入邮箱', trigger: 'blur' },
    { type: 'email', message: '请输入有效的邮箱地址', trigger: 'blur' }
  ]
}

// 用于存储每个表单的 ref
const formRefs = ref([])

// 提交表单
const submitForms = () => {
  // 校验所有表单
  const validationPromises = formRefs.value.map((formRef) => {
    return new Promise((resolve, reject) => {
    // 对每一个具体表单的校验,都返回一个是否成功的promise状态
      formRef.validate((valid) => {
        valid ? resolve(true) : reject(false)
      })
    })
  })

// 最重要的思路
  Promise.all(validationPromises)
    .then(() => {
      // 所有表单校验通过
      ElMessage.success('所有表单校验通过')
      console.log('提交表单数据:', formList)
    })
    .catch(() => {
      // 有表单校验失败
      ElMessage.error('表单校验失败,请检查输入')
    })
}
</script>

<style>
.dynamic-form {
  margin-bottom: 20px;
}
</style>

相关文章:

  • 如何使用AI辅助开发R语言
  • 软件项目交付体系-项目部署方案(Word原件)
  • mujoco graspnet 仿真项目的复现记录
  • AI 代码生成工具如何突破 Java 单元测试效能天花板?
  • iOS 上的内存管理是如何处理的?
  • Vue3+Vite+TypeScript+Element Plus开发-14.路由守卫
  • 重学 Android 自定义 View 系列(十二):环形SeekBar剖析
  • [蓝桥杯 2023 国 Python A] 整数变换
  • 阿里云 OSS 在 ZKmall开源商城的应用实践
  • 爱普生可编程晶振SG8201CJ和SG8200CJ在胃镜机器人发挥重要作用
  • linux中echo和cat输入用法
  • golang 对象池sync.Pool
  • RIP V2路由协议配置实验CISCO
  • 【技术白皮书】外功心法 | 第三部分 | 数据结构与算法基础(常用的数据结构)
  • 离线环境下docker启动springboot项目
  • 过往记录系列 篇五:市场黑天鹅事件历史梳理
  • 众趣科技丨数字孪生技术,赋能交通公共设施管理数字化升级
  • C++有关内存的那些事
  • SQL Server AlwaysOn (SQL 查询数据详解及监控用途)
  • 《Vue Router实战教程》4.路由的匹配语法
  • 哪些女性网站做女性慈善事业/b站不收费网站
  • 浦东网站开发培训/云浮seo
  • 潍坊专业网站制作公司营销/成都网站seo费用
  • 网站建设投标ppt/windows优化大师的功能
  • 重庆宣传网站怎么做/外包网络推广营销
  • 如何优化网站目录结构/竞价托管外包公司