循环验证表单信息

1.需求

要求在提交申请时校验每个地址使用信息的必填项是否填写完整

2.最终效果

3.具体操作

<el-dialog v-model="data.applyVisible" title="申请地址" center destroy-on-close>
      <el-button type="primary" @click="handleTabsAdd">新增地址使用信息</el-button>
      <el-tabs v-model="data.activeName" type="card"
        :closable="data.applyRegisteredAddressParams.length > 1"
        @tab-click="handleClick" @tab-remove="handleTabsRemove" @tab-add="handleTabsAdd" >
        <el-tab-pane :label="'地址使用信息' + (i + 1)" v-for="(it, i) in data.applyRegisteredAddressParams" :name="i" :key="i" >
        <el-form label-width="110px" ref="formRefs" :model="it">
            <el-form-item label="地址使用人姓名:" prop="userName"
              :rules="[{ required: true, message: '地址使用人姓名不能为空', trigger: 'blur' }]" >
              <el-input v-model="it.userName" class="w200" placeholder="请输入"></el-input>
            </el-form-item>
            <el-form-item label="联系电话:" prop="phone"
              :rules="[{ required: true, message: '联系电话不能为空', trigger: 'blur' }]" >
              <el-input v-model="it.phone" class="w200" placeholder="请输入" ></el-input>
            </el-form-item>
          </el-form>
        </el-tab-pane>
      </el-tabs>
      <template #footer>
        <el-button @click="cancelApply">取消</el-button>
        <el-button type="primary" @click="submitApply()">提交申请</el-button>
      </template>
</el-dialog>
const formRefs = ref(); // 表单ref

// 提交地址申请
const submitApply = () => {
  let promises = formRefs.value.map((item,index) => new Promise((resolve, reject) => {
    item.validate((valid, fields) => {
      if (!valid){ 
        reject(index);
      } else {
        resolve();
      }
    });
  }));

  Promise.all(promises).then(() => {
    saveContract('save').then(() => { // 申请地址
        applicationAddress().then((res) => {
          proxy.$message.success('申请成功');
        });
      });
    }).catch((ind) => {
      console.log("ind",ind);
      data.activeName = ind?ind:String(ind)
      ElMessage.error("请填写完整!")
    });
};

4.重点说明

(1)如何实现循环添加校验的

data.applyRegisteredAddressParams作为循环的数组,it作为具体数组元素的对象;需要在el-form标签上添加ref="formRefs"用来获取节点,model属性一定是绑定数组的元素(it)

(2)如何实现循环校验的

重点在于Promise.all()这个方法,Promise.all() 是一个 JavaScript 的内置函数,它接受一个 Promise 对象的数组作为参数,并返回一个新的 Promise 对象。这个新的 Promise 会在所有给定的 Promise 都成功完成时成功完成,或者在任何一个 Promise 失败时立即失败。

也就是我每一个用户都是一个Promise,每个Promise要么进入resolve()成功方法或者进入reject()失败方法。而Promise.all()这个方法要求所有的Promise都要进入成功方法后才会进入Promise.all()的成功方法(也就是进入then()),否则就会进入失败的方法(也就是catch())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/244879.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

工业级路由器在风力发电场的远程监控技术

工业级路由器在风力发电场的远程监控技术方面具有重要的应用意义。风力发电场通常由分布在广阔地区的风力发电机组组成&#xff0c;需要进行实时监测、数据采集和远程管理。工业级路由器作为网络通信设备&#xff0c;能够提供稳定可靠的网络连接和多种远程管理功能&#xff0c;…

国产猫粮推荐排行榜有哪些牌子?国产主食冻干猫粮品牌十大排行

近年来&#xff0c;冻干猫粮作为热门的高品质猫粮&#xff0c;受到了许多追求纯天然、健康食品的铲屎官的关注。萌新铲屎官就很疑惑了冻干猫粮可以代替猫粮作为主食吗&#xff1f;冻干猫粮真就那么好吗&#xff1f; 作为一个猫咖店长&#xff0c;这几年我至少给猫挑选了20几款…

拓展 Amazon S3 技术边界:Amazon S3 Express One Zone 的创新之路

授权说明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 自 Amazon S3 服务推出以来&#xff0c;一直是全球各行各业数百万客…

DevEco Studio 项目启动工程和Device Manage

DevEco Studio 项目启动工程和Device Manage 鸿蒙&#xff08;HarmonyOS&#xff09; 一、操作环境 操作系统: Windows 10 专业版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、创建虚拟机&#xff08;Device Manage&#xff09; 鸿蒙IDE创建虚拟设备入口有2个地方&…

MySQL——数据类型

目录 一.数据类型分类 二. 数值类型 1.tinyint类型 2.bit类型 3.float类型 4.decimal 三.字符串类型 1.char 2.varchar 四.日期和时间类型 五.enum和set 一.数据类型分类 关于数据库的数据类型有非常多&#xff0c;但是并非所有的数据类型都是我们常用的&#xff…

【PIE-Engine 数据资源】全球海面温度产品

文章目录 一、 简介二、描述三、波段四、示例代码参考资料 一、 简介 数据名称全球海面温度产品时间范围2002年- 2018年空间范围全球数据来源毛克彪教授团队代码片段var images pie.lmageCollection(“CAAS/SSTG”) 二、描述 全球海面温度产品是 2002-2019 年的全球海面温度…

Linux——Samba文件共享服务配置

SMB/CIFS协议 SMB协议(Server Message Block 又称Common Internet File System&#xff08;CIFS&#xff09;) 是由微软开发的网络传输协议&#xff0c;用来实现网络共享文件系统、打印机等资源。 SMB协议有多个版本和不同的兼容性。 SMBv1/CIFS: 也称为SMB1或CIFS。最初由Micr…

排序算法(详解)

排序在日常生活中十分重要&#xff0c;购物平台上商品的排序&#xff0c;各国高校等级的排序......可以说&#xff0c;现代生活中已经离不开排序了&#xff1b;因此学好排序算法至关重要&#xff0c;本篇文章就来讲讲常见的排序算法 排序的种类非常多&#xff0c;按照种类划分&…

SQL进阶理论篇(四):索引的结构原理(B树与B+树)

文章目录 简介如何评价索引的数据结构设计好坏二叉树的局限性什么是B树什么是B树总结参考文献 简介 我们在上一节中说过&#xff0c;索引其实是一种数据结构&#xff0c;那它到底是一种什么样的数据结构呢&#xff1f;本节将简单介绍一下几个问题&#xff1a; 什么样的数据结…

2024 年,新程序员如何与AI共赢!!

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

C++笔记汇总(随时更新)

你好&#xff0c;这里是争做图书馆扫地僧的小白。 个人主页&#xff1a;争做图书馆扫地僧的小白_-CSDN博客 目标&#xff1a;希望通过学习技术&#xff0c;期待着改变世界。 目录 前言 一、C语言向C语言过度的知识点 二、C语言的相关知识 总结 前言 2023.12.13 之前撰写的笔…

RobotFramework自动化测试框架的基础关键字

1.1.1 如何搜索RobotFramework的关键字 有两种方式可以快速的打开RIDE的关键字搜索对话框 1、选择菜单栏Tools->Search Keywords&#xff0c;然后会出现如下的关键字搜索对话框&#xff0c;这个对话框就类似提供了一个关键字的API的功能&#xff0c;提供了关键字的…

决策曲线 DCA 学习

roc回顾ROC及曲线面积汇总学习-CSDN博客 原理 P&#xff1a;给真阳性患者施加干预的受益值&#xff08;比如用某生化指标预测某患者有癌症&#xff0c;实际也有&#xff0c;予活检&#xff0c;达到了确诊的目的&#xff09;&#xff1b; L&#xff1a;给假阳性患者施加干预的…

进程调度算法

进程调度算法 优先调度算法 先来先服务调度算法&#xff08;FCFS&#xff09; 当在作业调度中采用该算法时&#xff0c;每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业&#xff0c;将它们调入内存&#xff0c;为它们分配资源、创建进程&#xff0c;然后放…

使用qt实现四则运算计算机项目

这是我们要包含的头文件 #include <QWidget> #include<QStack> #include<string.h> #include<string> 这是我在ui界面创建的计算机基础框架。 接下来要实现按住每个按钮在白框内显示&#xff1b; 因此我们要定义一个QString 类型的变量 QString e…

react-router-dom v6中优雅处理404重定向问题

在基于React的单页面应用&#xff08;SPA&#xff09;中&#xff0c;使用 react-router-dom 库来管理路由是一项关键任务。当用户访问一个不存在的页面时&#xff0c;我们通常希望能够以优雅的方式处理404情况&#xff0c;从而提升用户体验。本文将探讨如何在React应用中使用re…

【算法Hot100系列】无重复字符的最长子串

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

python下使用Open3D

1.切记不要安装最新的python否则无法使用open3D &#xff0c;官网显示只支持python3.8-3.11 这是我安装的python版本 2.由于访问github很慢&#xff0c;所以我手动下载ply文件 https://github.com/isl-org/open3d_downloads/releases/download/20220201-data/fragment.ply 3…

Python占位符%详解:格式化字符串的利器

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在Python中&#xff0c;%占位符是一种强大的工具&#xff0c;用于格式化字符串。本文将深入解析Python中占位符的使用方法&#xff0c;包括字符串格式化、数字格式化、日期格式化等多个方面。通过丰富的示例代码…

设计模式(2)--对象创建(2)--生成器

1. 意图 将一个复杂对象的构建与它的表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。 2. 四种角色 指挥(Director)、抽象生成器(Builder)、具体生成器(Concrete Builder)、产品(Product) 3. 优点 3.1 可以改变一个产品的内部表示(通过定义新的生成器)。 3.2 将构…