当前位置: 首页 > 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任务分…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...