vue3 + Ant design vue formItem 无法使用嵌套的form表单校验

news2024/11/29 4:03:14

文章目录

  • 前言
  • 一、背景`在这里插入代码片`
  • 二、操作步骤
    • 1.复现前的准备工作
      • (1)vue版本和ant design vue 版本
      • (2)任意页面的代码
    • 2.解决问题
    • 3.自定义表单校验的代码
  • 总结


前言

提示:


一、背景在这里插入代码片

  • 背景:
    • Ant design vue + vue3的项目,后端的数据格式为对象套对象,绑定数据的时候发现,第二次的formItem表单校验没有效果,出现以下问题:
    • 理想场景:输入一部分的必填项,点击确定,表单校验不通过的提示,不请求接口及其后续操作。
    • 实际场景:输入一部分的必填项,点击确定,直接请求新增/编辑接口,然后跳转页面。
  • 技术定位:初级

二、操作步骤

1.复现前的准备工作

(1)vue版本和ant design vue 版本

"ant-design-vue": "^3.2.20",
"vue": "^3.2.33",

(2)任意页面的代码

如下面代码示例, 对象password.ps1使用表单校验,没有输入任何数据,表单校验仍然通过了

<template>
  <div>{{ formState }}</div>
  <Form :model="formState" name="basic" autocomplete="off" @finish="onFinish" @finishFailed="onFinishFailed">
    <FormItem label="Username" name="username" :rules="[{ required: true, message: 'Please input your username!' }]">
      <Input v-model:value="formState.username" />
    </FormItem>

    <FormItem label="Password" name="password.ps1"
      :rules="[{ required: true, message: 'Please input your username!' }]">
      <InputPassword v-model:value="formState.password.ps1" />
    </FormItem> {{ formState.password.ps1 }}
    <FormItem :wrapper-col="{ offset: 8, span: 16 }">
      <Button type="primary" html-type="submit">Submit</Button>
    </FormItem>
  </Form>
</template>
<script lang="ts" setup>
import { reactive } from 'vue'
import { Form, FormItem, Input, InputPassword, Button } from 'ant-design-vue'
import type { Rule } from 'ant-design-vue/es/form';
interface objpasType {
  ps1: string,
  ps2: string,
}
interface FormStateType {
  username: string;
  password: objpasType;
  remember: boolean;
}
const rules: Record<string, Rule[]> = {
  username: [{ required: true, message: '请输入', trigger: 'change' }],
  'password.ps1': [{ required: true, message: '请输入', trigger: 'change' }],
}
const formState = reactive<FormStateType>({
  username: '',
  password: {
    ps1: '',
    ps2: '',
  },
  remember: true,
});
const onFinish = (values: any) => {
  console.log('Success:', values);
};

const onFinishFailed = (errorInfo: any) => {
  console.log('Failed:', errorInfo);
};
</script>

2.解决问题

当我们使用自定义表单校验后,虽然values里面的值依旧为空,但是通过了表单校验
在这里插入图片描述

3.自定义表单校验的代码

<template>
  <div>{{ formState }}</div>
  <Form :model="formState" name="basic" autocomplete="off" @finish="onFinish" @finishFailed="onFinishFailed">
    <FormItem label="Username" name="username" :rules="[{ required: true, message: 'Please input your username!' }]">
      <Input v-model:value="formState.username" />
    </FormItem>

    <FormItem label="Password" name="password.ps1"
      :rules="[{ required: true, validator: (rules) => checkSchedulingCycle(rules, formState.password.ps1), }]">
      <InputPassword v-model:value="formState.password.ps1" />
    </FormItem> {{ formState.password.ps1 }}
    <FormItem :wrapper-col="{ offset: 8, span: 16 }">
      <Button type="primary" html-type="submit">Submit</Button>
    </FormItem>
  </Form>
</template>
<script lang="ts" setup>
import { reactive } from 'vue'
import { Form, FormItem, Input, InputPassword, Button } from 'ant-design-vue'
import type { Rule } from 'ant-design-vue/es/form';
interface objpasType {
  ps1: string,
  ps2: string,
}
interface FormStateType {
  username: string;
  password: objpasType;
  remember: boolean;
}
// const rules: Record<string, Rule[]> = {
//   username: [{ required: true, message: '请输入', trigger: 'change' }],
//   'password.ps1': [{ required: true, message: '请输入', trigger: 'change' }],
// }
const checkSchedulingCycle = async (_rule: Rule, value: any) => {
  console.log('rules', value)
  if (!value) return Promise.reject('ps1不能为空');
  return Promise.resolve();
};
const formState = reactive<FormStateType>({
  username: '',
  password: {
    ps1: '',
    ps2: '',
  },
  remember: true,
});
const onFinish = (values: any) => {
  console.log('Success:', values);
};

const onFinishFailed = (errorInfo: any) => {
  console.log('Failed:', errorInfo);
};
</script>



总结

ant design vue 不支持嵌套表格的表单校验,只能使用自定义表单校验

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

音视频入门基础:FLV专题(13)——FFmpeg源码中,解析任意Type值的SCRIPTDATAVALUE类型的实现

一、SCRIPTDATAVALUE类型 从《音视频入门基础&#xff1a;FLV专题&#xff08;9&#xff09;——Script Tag简介》中可以知道&#xff0c;根据《video_file_format_spec_v10_1.pdf》第80到81页&#xff0c;SCRIPTDATAVALUE类型由一个8位&#xff08;1字节&#xff09;的Type和…

go语言protoc的详细用法与例子

一. 原来的项目结构 二. 选择源proto文件及其目录&目的proto文件及其目录 在E:\code\go_test\simple_demo\api 文件夹下&#xff0c;递归创建\snapshot\helloworld\v1\ad.pb.go E:\code\go_test\simple_demo> protoc --go_outpathssource_relative:./api .\snapshot\h…

数据结构--二叉树的顺序实现(堆实现)

引言 在计算机科学中&#xff0c;二叉树是一种重要的数据结构&#xff0c;广泛应用于各种算法和程序设计中。本文将探讨二叉树的顺序实现&#xff0c;特别是堆的实现方式。 一、树 1.1树的概念与结构 树是⼀种⾮线性的数据结构&#xff0c;它是由 n(n>0) 个有限结点组成…

新款平行进口奔驰GLS450升级原厂AR实景导航人机交互行车记录仪等功能

平行进口的24款奔驰GLS450升级原厂中规导航主机通常具备以下功能&#xff1a; 人机交互系统&#xff1a;该导航主机配备了人机交互系统&#xff0c;可以通过触摸屏、旋钮或语音控制等方式与导航系统进行交互&#xff0c;方便驾驶者进行导航设置和操作。 实景AR导航&#xff1…

使用 classification_report 评估 scikit-learn 中的分类模型

介绍 在机器学习领域&#xff0c;评估分类模型的性能至关重要。scikit-learn 是一个功能强大的 Python 机器学习工具&#xff0c;提供了多种模型评估工具。其中最有用的函数之一是 classification_report&#xff0c;它可以全面概述分类模型的关键指标。在这篇文章中&#xff…

字符串和字符数组(1)

1.字符串和\0 C语言中有字符类型&#xff0c;但没有字符串类型&#xff0c;C语言中字符串就是由双引号引起来的一串字符&#xff0c;比如&#xff1a;"asdf"&#xff1b; 一个字符串中我们能直观的看到一些字符&#xff0c;比如&#xff1a;字符串常量"asdfgh…

三、Java AI 编程助手

AI 对于我们来说是一个高效的编程助手&#xff0c;给我们提供了有效的建议和解决方案&#xff0c;高效利用&#xff0c;无疑是如虎添翼。接下来为大家推荐一个 AI 编程助手。 Fitten Code 1、简介 Fitten Code 免费且支持 80 多种语言&#xff1a;Python、C、Javascript、Type…

2024.9.29 问卷数据分析

最近拿到了一份受众回访的问卷数据&#xff0c;排到的任务是对它进行数据探索。 其实对于问卷数据的处理我只在参加正大杯那次做过&#xff08;正大杯拿了校三&#xff09;&#xff0c;可见这个处理水平还有待提高&#xff08;当然是各种原因促成的结果&#xff09;&#xff0…

python配置环境变量

方法一&#xff1a;首先卸载重新安装&#xff0c;在安装时勾选增加环境变量 方法二&#xff1a;我的电脑-属性-高级系统配置 手动添加环境变量&#xff0c;路径为python的安装路径 检查&#xff1a;查看环境变量是否安装成功 安装第三方lib winr&#xff0c;输入cmd pip ins…

[SAP ABAP] 数据元素添加参数ID(Parameter ID)

学生表(ZDBT_STU_437) 示例&#xff1a;为学生表ZDBT_STU_437中的数据元素ZDE_STUID_437创建Parameter ID 1.使用事务码SM30维护TPARA表 新建参数ID并输入简短描述 点击保存按钮&#xff0c;选择指定的包即可生成参数ID 2.参数ID和数据元素绑定 使用SE11对学生表(ZDBT_STU_…

小程序 uniapp+Android+hbuilderx体育场地预约管理系统的设计与实现

目录 项目介绍支持以下技术栈&#xff1a;具体实现截图HBuilderXuniappmysql数据库与主流编程语言java类核心代码部分展示登录的业务流程的顺序是&#xff1a;数据库设计性能分析操作可行性技术可行性系统安全性数据完整性软件测试详细视频演示源码获取方式 项目介绍 用户 注册…

【ubuntu】ubuntu20.04安装chrome浏览器

1.下载 https://download.csdn.net/download/qq_35975447/89842972 https://www.google.cn/chrome/ 2.安装 sudo dpkg -i google-chrome-stable_current_amd64.deb 3.使用

vscode配置R语言debugger环境:“vscDebugger“的安装

要在 R 中安装 vscDebugger 包&#xff0c;可以按照以下步骤进行&#xff1a; 方法一&#xff1a;使用命令面板自动安装 打开命令面板&#xff1a; 在 Visual Studio Code 中按 CtrlShiftP 打开命令面板。 运行安装命令&#xff1a; 在命令面板中输入并选择 r.debugger.updat…

DES算法的详细描述和C语言实现

访问www.tomcoding.com网站&#xff0c;学习Oracle内部数据结构&#xff0c;详细文档说明&#xff0c;下载Oracle的exp/imp&#xff0c;DUL&#xff0c;logminer&#xff0c;ASM工具的源代码&#xff0c;学习高技术含量的内容。 前言 很久以前用汇编语言实现过DES算法&#x…

UE4 材质学习笔记02(数据类型/扭曲着色器)

一.什么是数据类型 首先为啥理解数据类型是很重要的。一些节点的接口插槽只接受特定类型的数据&#xff0c;如果连接了不匹配的数据就会出现错误&#xff0c;有些接口可以接受任何数据类型&#xff0c;但是实际上只会使用到其中的一些。并且有时可以将多个数据流合并成一个来编…

《python语言程序设计》2018版第8章19题几何Rectangle2D类(上)--原来我可以直接调用

2024.9.29 玩了好几天游戏。 感觉有点灵感了。还想继续玩游戏。 2024.10.4 今天练习阿斯汤加练完从早上10点睡到下午2点.跑到单位玩游戏玩到晚上10点多. 现在回家突然有了灵感 顺便说一句,因为后弯不好,明天加练一次. 然后去丈母娘家. 加油吧 第一章、追求可以外调的函数draw_r…

Spring Boot集成encache快速入门Demo

1.什么是encache EhCache 是一个纯 Java 的进程内缓存框架&#xff0c;具有快速、精干等特点&#xff0c;是 Hibernate 中默认的 CacheProvider。 Ehcache 特性 优点 快速、简单支持多种缓存策略&#xff1a;LRU、LFU、FIFO 淘汰算法缓存数据有两级&#xff1a;内存和磁盘&a…

【Git】vscode链接github拉去镜像

1.拉取别人的项目到自己的仓库 2.回到自己的仓库拉取文件到vscode里面下载 使用vscode进入虚拟机 推送到自己的仓库上面 在 github 页面将修改的内容 PR 到 Tutorial 创建一个个人仓库 代码如下 cd demo git clone https://github.com/3154067760/Tutorial.git cd Tutorial/…

贴吧软件怎么切换ip

在网络使用中&#xff0c;有时我们需要切换IP地址来满足特定的需求&#xff0c;比如需要切换贴吧软件IP以进行不同的操作。本文将介绍几种贴吧切换IP地址的方法&#xff0c;帮助用户更好地管理自己的网络身份和访问权限。 1、更换网络环境‌ 通过连接到不同的Wi-Fi网络或使用移…

HBuilderX连接MuMu模拟器最简单的方法

1、在MuMu官网下载MuMu模拟器官网_安卓12模拟器_网易手游模拟器 跟随步骤安装 2、安装后打开MuMu多开器&#xff0c;查看ADB端口号 或者启动MuMu模拟器在问题诊断中查看 3、在HBuilder中配置模拟器端口号和adb路径 4.配置环境变量 5、adbl连接端口 打开cmd运行以下命令 adb …