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

前端开发 vue 中如何实现 u-form 多个form表单同时校验

在 Vue 项目中使用 UView UI 的 u-form 组件时,多个表单同时校验的需求非常常见。例如,当我们有多个表单需要在同一个页面中进行校验并提交时,我们需要确保每个表单都能进行单独验证,同时可以在同一时刻进行批量验证。

接下来,我们结合实际项目的代码,讲解如何使用 u-form 组件实现多个表单同时校验。

1. 项目背景

假设你有一个页面,需要用户同时填写用户信息和公司信息两个表单。用户信息包括姓名和年龄,公司的信息包括公司名和职位。你希望在用户点击提交按钮时,能够同时校验这两个表单,确保每个表单的数据都符合要求。

2. 代码示例

2.1 页面模板
<template><view><!-- 用户信息表单 --><u-form :model="userForm" ref="userForm" @submit="submitForms"><u-form-item label="姓名" prop="name" :rules="nameRules"><u-input v-model="userForm.name" placeholder="请输入姓名" /></u-form-item><u-form-item label="年龄" prop="age" :rules="ageRules"><u-input type="number" v-model="userForm.age" placeholder="请输入年龄" /></u-form-item><u-form-item><u-button type="primary" block formType="submit">提交用户信息</u-button></u-form-item></u-form><!-- 公司信息表单 --><u-form :model="companyForm" ref="companyForm" @submit="submitForms"><u-form-item label="公司名称" prop="companyName" :rules="companyNameRules"><u-input v-model="companyForm.companyName" placeholder="请输入公司名称" /></u-form-item><u-form-item label="职位" prop="position" :rules="positionRules"><u-input v-model="companyForm.position" placeholder="请输入职位" /></u-form-item><u-form-item><u-button type="primary" block formType="submit">提交公司信息</u-button></u-form-item></u-form><!-- 提交按钮 --><u-button type="success" block @click="submitForms">提交所有信息</u-button></view>
</template>
2.2 页面脚本
<script>
export default {data() {return {// 用户信息表单的数据userForm: {name: '',age: ''},// 用户信息表单的校验规则nameRules: [{ required: true, message: '姓名是必填的', trigger: 'blur' }],ageRules: [{ required: true, message: '年龄是必填的', trigger: 'blur' },{ type: 'number', message: '请输入有效的年龄', trigger: 'blur' }],// 公司信息表单的数据companyForm: {companyName: '',position: ''},// 公司信息表单的校验规则companyNameRules: [{ required: true, message: '公司名称是必填的', trigger: 'blur' }],positionRules: [{ required: true, message: '职位是必填的', trigger: 'blur' }]};},methods: {// 提交表单submitForms() {// 同时校验所有表单const userFormValidation = this.$refs.userForm.validate();const companyFormValidation = this.$refs.companyForm.validate();// 使用 Promise.all 来并行验证多个表单Promise.all([userFormValidation, companyFormValidation]).then(() => {// 如果所有表单验证通过this.$u.toast('所有表单验证通过,提交成功');// 可以在这里进行数据提交}).catch(() => {// 如果有任何表单验证失败this.$u.toast('表单验证失败,请检查输入');});}}
};
</script>

3. 详细说明

3.1 表单组件使用
  1. u-form:这是 UView UI 中的表单组件。每个表单组件通过 :model 绑定对应的数据对象,通过 ref 设置引用名,以便在 JavaScript 中获取并调用表单的验证方法。

  2. u-form-item:每个表单项。它用来包装一个表单字段,并且通过 prop 来指定字段名称,用来与表单数据进行绑定。

  3. u-input:用于输入数据的组件。它通过 v-model 来双向绑定数据。

3.2 校验逻辑
  1. 表单校验规则:每个表单项都有相应的校验规则(rules)。这些规则确保字段的输入符合预期。在此示例中,我们使用了必填和类型检查(如 number 类型)的规则。

  2. validate 方法:每个 u-form 组件都有一个 validate 方法,它会触发表单的校验并返回一个 Promise。如果表单验证成功,Promise 会成功解析;如果验证失败,Promise 会被拒绝。

3.3 提交和批量校验
  1. submitForms 方法:这是页面的提交处理方法。在该方法中,我们使用了 this.$refs.userForm.validate()this.$refs.companyForm.validate() 来分别触发两个表单的校验,并通过 Promise.all 来并行校验这两个表单。

  2. Promise.all:我们将两个表单的校验 Promise 包装到 Promise.all 中。这样,两个表单的校验会同时进行。当所有表单验证都成功时,then 方法被触发;如果有任何一个表单验证失败,catch 方法会被触发。

  3. this.$u.toast:用来显示提示消息,通知用户是否提交成功或失败。

4. 关键点总结

  • 使用 ref 引用多个表单,方便访问每个表单实例。
  • 通过 this.$refs.form.validate() 触发表单校验。
  • 使用 Promise.all 来并行校验多个表单,确保所有表单的验证同时进行。
  • 利用 validate 返回的 Promise 来处理校验成功与失败的逻辑。

5. 实际项目中的应用场景

在实际项目中,可能会有以下场景需要处理多个表单的验证:

  • 多步骤表单:用户在不同的步骤中填写不同的表单,在提交时需要同时验证所有步骤的表单。
  • 用户与公司信息:用户需要在同一页面提交多个表单(例如,个人信息和公司信息),而且这些表单有不同的校验规则。
  • 动态表单:根据不同的用户选择,动态展示多个表单项,最后进行一次统一的验证。

通过使用 u-form 的并行校验方法,可以方便地实现这些需求,提高用户体验和开发效率。

相关文章:

前端开发 vue 中如何实现 u-form 多个form表单同时校验

在 Vue 项目中使用 UView UI 的 u-form 组件时&#xff0c;多个表单同时校验的需求非常常见。例如&#xff0c;当我们有多个表单需要在同一个页面中进行校验并提交时&#xff0c;我们需要确保每个表单都能进行单独验证&#xff0c;同时可以在同一时刻进行批量验证。 接下来&am…...

【网络】什么是速率 (Rate)带宽 (Bandwidth)吞吐量 (Throughput)?

注意单位&#xff1a; 在 kbps、Mbps、Gbps 中&#xff0c;前面的 k、M、G 是 国际单位制(SI) 的前缀&#xff0c;表示不同的数量级&#xff1a; k&#xff08;千/kilo&#xff09;: (10^3 1,000) kbps&#xff08;kilobits per second&#xff09;: 每秒 1,000 位&#xff08…...

(leetcode算法题)769. 最多能完成排序的块

Q1. 是否能用贪心算法&#xff1f;为什么&#xff1f; 先预设一个策略&#xff0c;每当当前的nums[i]满足可以 "成块"&#xff0c;就直接让这个数成块&#xff0c;也就是说之后的遍历过程中不会将这个数在考虑到自己的块内&#xff0c; "成块" 是指只要只…...

高光谱相机的特点

光谱特性 高光谱分辨率&#xff1a;能将光谱范围分割成极窄的波段&#xff0c;光谱分辨率通常达到纳米级甚至亚纳米级&#xff0c;可精确捕捉到不同物质在细微光谱差异上的特征&#xff0c;比如可以区分不同种类的植被因叶绿素含量等差异而在光谱上的细微变化。 多波段探测&a…...

《Spring Framework实战》8:4.1.3.Bean 概述

欢迎观看《Spring Framework实战》视频教程 Spring IoC 容器管理一个或多个 bean。这些 bean 是使用 您提供给容器的配置元数据&#xff08;例如&#xff0c;以 XML <bean/>定义的形式&#xff09;。 在容器本身中&#xff0c;这些 bean 定义表示为BeanDefinition对象&a…...

BGP的local_preference本地优先级属性

一、BGP的local preference属性简介 1、local preference公认任意属性 当一条BGP路由器中存在多条去往同一目标网络的BGP路由时&#xff0c;BGP协议会对这些BGP路由属性进行比较&#xff0c;从而筛选出最佳到达目标网络的通达路径。本地优先属性&#xff0c;只在IBGP对等体之间…...

IP地址与端口号

ip地址与端口号 IP地址和端口号是网络通信中的两个重要概念&#xff0c;它们共同构成了网络通信的基础。 IP地址&#xff1a;网络世界的门牌号 定义&#xff1a;IP地址&#xff08;Internet Protocol Address&#xff09;是分配给网络设备的数字标签&#xff0c;用于在计算机网…...

Fastapi + vue3 自动化测试平台(2)--日志中间件

FastAPI Vue3 自动化测试平台&#xff08;2&#xff09;-- 日志中间件 前言 在开发和运行自动化测试平台时&#xff0c;日志功能是至关重要的一部分。日志不仅能帮助我们快速定位和解决问题&#xff0c;还能作为平台运行的记录依据&#xff0c;为后续分析和优化提供参考。 …...

iOS - AutoreleasePool

1. 基本数据结构 // AutoreleasePool 的基本结构 struct AutoreleasePoolPage {static pthread_key_t const key AUTORELEASE_POOL_KEY;magic_t const magic;id *next; // 指向下一个可存放对象的地址pthread_t const thread; // 所属线程AutoreleasePoolPage …...

1.CSS的复合选择器

1.1 什么是复合选择器 在CSS中&#xff0c;可以根据选择器的类型把选择器分为基础选择器和复合选择器&#xff0c;复合选择器是建立在基础选择器之上&#xff0c;对基础选择器进行组合形成的。 复合选择器可以更精准、更高效的选择目标元素&#xff08;标签&#xff09; 复…...

优质内容在个人IP运营中的重要性:以开源AI智能名片商城小程序为应用实例的深度探讨

摘要&#xff1a;在数字化时代&#xff0c;个人品牌&#xff08;IP&#xff09;的塑造与传播已成为各行各业提升影响力、吸引用户关注、促进商业转化的关键策略。优质内容作为连接个人IP与目标受众的桥梁&#xff0c;其在个人IP运营中的重要性不言而喻。本文旨在深入探讨优质内…...

Kafka性能测试

kafka是一个大数据消息队列&#xff08;可以看做为缓存软件&#xff09; 功能测试&#xff1a;能够读写数据 性能测试&#xff1a;1、测试生产者每秒往kafka写入的最大吞吐量 2、测试消费者每秒从kafka里获取消息最大吞吐量 硬件 3台物理机组成的kafka集群。 内存121G、24…...

解决Docker冲突问题

错误&#xff1a;docker-ce-cli conflicts with 2:docker-1.13.1-210.git7d71120.el7.centos.x86_64 错误&#xff1a;docker-ce conflicts with 2:docker-1.13.1-210.git7d71120.el7.centos.x86_64 您可以尝试添加 --skip-broken 选项来解决该问题 您可以尝试执行&#xff1a;…...

新手入门 React .tsx 项目:从零到实战

&#x1f680; 新手入门 React .tsx 项目&#xff1a;从零到实战 &#x1f4bb;✨ 如果你是 React 新手&#xff0c;刚接触 .tsx 文件&#xff0c;不要担心&#xff01;跟着这份指南&#xff0c;一步一步来&#xff0c;你很快就能上手了&#xff01;&#x1f447; &#x1f4d…...

基于可信数据空间的企业数据要素与流通体系建设(附ppt 下载)

近期&#xff0c;可信数据空间会议召开。大数据系统软件国家工程研究中心总工程师王晨发表了题为《基于可信数据空间的企业数据要素与流通体系建设》主旨演讲。 篇幅限制&#xff0c;部分内容如下&#xff1a;...

二维数组:求最大元素及其所在的行坐标及列坐标(PTA)C语言

求出NM整型数组的最大元素及其所在的行坐标及列坐标&#xff08;如果最大元素不唯一&#xff0c;选择位置在最前面的一个&#xff09;。 函数接口定义&#xff1a; int fun(int array[N][M]) ; 注意&#xff1a;函数只需靠return返回最大元素的值&#xff0c; 行、列坐标通过…...

WebRtc01: 课程导学、框架介绍

应用 难点 课程大纲 学习收获 涉及内容 概述 用途 学习收获...

HQChart使用教程30-K线图如何对接第3方数据44-DRAWPIE数据结构

HQChart使用教程30-K线图如何对接第3方数据44-DRAWPIE数据结构 效果图DRAWPIEHQChart代码地址后台数据对接说明示例数据数据结构说明效果图 DRAWPIE DRAWPIE是hqchart插件独有的绘制饼图函数,可以通过麦语法脚本来绘制一个简单的饼图数据。 饼图显示的位置固定在右上角。 下…...

【cuda学习日记】2.2 使用2维网络(grid)和2维块(block)对矩阵进行求和

在2.0中进行了用一维网格和块对一维向量进行了求和。 在2.1中例化了二维的网格和块。 接下来进行2维网络&#xff08;grid&#xff09;和2维块&#xff08;block&#xff09;对矩阵进行求和。 #include <stdio.h> #include <stdlib.h> #include <time.h> #i…...

深度学习中CUDA环境安装教程

首先说明&#xff0c;本人是小白&#xff0c;一次安装&#xff0c;可能有不对的地方&#xff0c;望包含。 安装CUDA 因为我们是深度学习&#xff0c;很多时候要用到gpu进行训练&#xff0c;所以我们需要一种方式加快训练速度。 通俗地说&#xff0c;CUDA是一种协助“CPU任务分…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...

Modbus RTU与Modbus TCP详解指南

目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...

自然语言处理——文本分类

文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益&#xff08;IG&#xff09; 分类器设计贝叶斯理论&#xff1a;线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别&#xff0c; 有单标签多类别文本分类和多…...

rm视觉学习1-自瞄部分

首先先感谢中南大学的开源&#xff0c;提供了很全面的思路&#xff0c;减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接&#xff1a;https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架&#xff1a; 代码框架结构&#xff1a;readme有…...

负载均衡器》》LVS、Nginx、HAproxy 区别

虚拟主机 先4&#xff0c;后7...