vue3循环表单【以el-form组件为例】,如何校验全部表单,全部表单校验通事 ...

王柳  论坛元老 | 2025-4-12 23:21:02 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1892|帖子 1892|积分 5676

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

代码如下:
  1. <template>
  2.   <div>
  3.     <!-- 循环渲染表单 -->
  4.     <el-form
  5.       v-for="(formItem, index) in formList"
  6.       :key="index"
  7.       :model="formItem"
  8.       :rules="rules"
  9.       ref="formRefs"
  10.       class="dynamic-form"
  11.     >
  12.       <el-form-item label="姓名" prop="name">
  13.         <el-input v-model="formItem.name"></el-input>
  14.       </el-form-item>
  15.       <el-form-item label="年龄" prop="age">
  16.         <el-input v-model.number="formItem.age"></el-input>
  17.       </el-form-item>
  18.       <el-form-item label="邮箱" prop="email">
  19.         <el-input v-model="formItem.email"></el-input>
  20.       </el-form-item>
  21.     </el-form>
  22.     <el-button type="primary" @click="submitForms">提交</el-button>
  23.   </div>
  24. </template>
  25. <script setup>
  26. import { ref, reactive } from 'vue'
  27. import { ElMessage } from 'element-plus'
  28. const formList = reactive([
  29.   { name: '', age: '', email: '' },
  30.   { name: '', age: '', email: '' }
  31. ])
  32. const rules = {
  33.   name: [
  34.     { required: true, message: '请输入姓名', trigger: 'blur' }
  35.   ],
  36.   age: [
  37.     { required: true, message: '请输入年龄', trigger: 'blur' },
  38.     { type: 'number', message: '年龄必须是数字', trigger: 'blur' }
  39.   ],
  40.   email: [
  41.     { required: true, message: '请输入邮箱', trigger: 'blur' },
  42.     { type: 'email', message: '请输入有效的邮箱地址', trigger: 'blur' }
  43.   ]
  44. }
  45. // 用于存储每个表单的 ref
  46. const formRefs = ref([])
  47. // 提交表单
  48. const submitForms = () => {
  49.   // 校验所有表单
  50.   const validationPromises = formRefs.value.map((formRef) => {
  51.     return new Promise((resolve, reject) => {
  52.     // 对每一个具体表单的校验,都返回一个是否成功的promise状态
  53.       formRef.validate((valid) => {
  54.         valid ? resolve(true) : reject(false)
  55.       })
  56.     })
  57.   })
  58. // 最重要的思路
  59.   Promise.all(validationPromises)
  60.     .then(() => {
  61.       // 所有表单校验通过
  62.       ElMessage.success('所有表单校验通过')
  63.       console.log('提交表单数据:', formList)
  64.     })
  65.     .catch(() => {
  66.       // 有表单校验失败
  67.       ElMessage.error('表单校验失败,请检查输入')
  68.     })
  69. }
  70. </script>
  71. <style>
  72. .dynamic-form {
  73.   margin-bottom: 20px;
  74. }
  75. </style>
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王柳

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表