反应式表单数组 - 推送新元素时避免验证错误

2023-11-27

我有一个由单个表单数组组成的表单组:

ngOnInit() {
    this.deviceDetailsFormGroup = this._formBuilder.group({
        deviceDetails: this._formBuilder.array([
            this.buildDeviceDetailsForm()
        ])
    });
}

表单数组中的每个控件都需要验证器:

buildDeviceDetailsForm(): FormGroup {
    return this._formBuilder.group({
        ipAddressCtrl: [
            "",
            [Validators.pattern(ipaddressPattern), Validators.required]
        ],
        hostnameCtrl: [
            "",
            [
                Validators.required,
                Validators.maxLength(30),
                Validators.minLength(5)
            ]
        ]
    });
}

以下是我对表单数组的推送和删除函数:

addNewDevice() {
    this.deviceItems = this.deviceDetailsFormGroup.get(
        "deviceDetails"
    ) as FormArray;

    if (this.deviceItems.length > MAX_DEVICES) {
        this.toastNotif.errorToastNotif(
            `A maximum of ${MAX_DEVICES} devices can be selected for a single job scan`,
            "Too many devices selected"
        );
        return;
    }

    if (this.deviceDetailsFormGroup.invalid) {
        return;
    }

    let mapIP = new Map<string, number>();

    // Warn about duplicate IP's in form
    this.deviceItems.controls.forEach(ctrl => {
        if (mapIP[ctrl.value.ipAddressCtrl] === 0) {
            this.toastNotif.warningToastNotif(
                "You have entered duplicate IP's in the form fields",
                "Duplicate" + " IP's"
            );
        }

        mapIP[ctrl.value.ipAddressCtrl] = 0;
    });

    this.deviceItems.push(this.buildDeviceDetailsForm());
}

removeDevice(i: number) {
    this.deviceItems.removeAt(this.deviceItems.length - 1);
}

当我将新元素推送到表单数组时,它们被标记为无效,尽管它们未受影响且原始。我知道这是由验证器和创建新的时设置的空默认值引起的FormGroup.

是否可以避免这种行为FormArray仅当元素被触摸时才会被标记为错误?

提前致谢。


我有一个非常相似的情况,每当我添加一个新的formGroup to my formArray即使它们是,它的验证也会被触发untouched & pristine。原来如果用按钮动态添加formGroups它将默认操作为提交事件,如果您不指定按钮类型,则会触发验证运行。

Adding type="button"解决了问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

反应式表单数组 - 推送新元素时避免验证错误 的相关文章

  • ASP.NET MVC (Razor) 与 Angular 5

    我们目前正在考虑从 ASP NET MVC 迁移到 Angular 5 主要是因为它看起来是最好 最新的框架 然而 我们似乎都无法找出为什么 Angular 比 MVC Razor 更好的硬道理 SPA 与 MPA 似乎是不同的方法 但实际
  • 使用 Tailwindcss 时焦点上的 Angular 15 Material 错误输入

    对焦前 对焦后 Problem 使用 Angular Mat v 15 和最新的 tailwindcss 在聚焦输入字段时存在错误 要重现该问题 ng new angular test cd angular test ng add angu
  • 在 Angular 2 中将时间 hh:mm:ss 转换为 GMT 时间格式

    Input 时间 21 00 00 输出应该是 时间 2017年12月20日星期三21 00 00 GMT 0530 IST OR 时间 2017 12 20 21 00 00 您的输入是 21 00 00 将您的输入拆分为 使用下面的JS
  • Angular 4.x + Cordova:FileReader 无提示失败(白屏死机)

    我有一个 Angular 4 3 Cordova 应用程序 曾经运行得很好 但现在 我在应用程序启动时出现黑屏 并且什么也没有发生 经过一段时间的挖掘 我意识到它来自哪里 我的主页受保护CanActivate守卫将检查一些文件系统持久的首选
  • 从 SERVICE 执行 COMPONENT 方法

    我正在尝试执行一个组件method from a 服务方式 我看到了另外 2 个线程 Link1 如何从服务调用组件方法 https stackoverflow com questions 40788458 how to call comp
  • NX MFE 角度模块联盟无法访问远程微前端

    我有一个 shell 和两个使用 NX 模块联合的 MFE 即 机构 a and home b 它托管在不同的子域中 我在尝试访问时遇到问题 My 模块联合 manifest json agency https a abc maindoma
  • 将 FirebaseUI 与 AngularFire2 结合使用

    我还没有找到任何样本 是否可以使用Firebase用户界面 https github com firebase firebaseui web使用 AngularFire2 AFAIK UI 不是 AngularFire2 的一部分 是的 A
  • Angular 4 Subscribe方法多次调用

    我正在创建一个全局模态组件 我的问题是 当我调用 subscribe 方法时 它会根据调用的模态数量多次调用 如何防止对可观察订阅方法的多次调用 请检查下面我的代码 提前致谢 模态 model ts export class Modal t
  • Angular/RxJS 我什么时候应该取消订阅“订阅”

    我什么时候应该储存Subscription实例并调用unsubscribe 在此期间ngOnDestroy生命周期以及什么时候我可以忽略它们 保存所有订阅会给组件代码带来很多混乱 HTTP 客户端指南 https angular io do
  • 如何在 Ionic Page 中定义可选段参数?

    如何在 Ionic 3 PWA 中定义可选参数 我现在的 IonicPage装饰器看起来像 IonicPage segment landing id But the id参数必须是可选的 如果我没有通过id 我收到此错误 未捕获 承诺 要插
  • 如何将 ng-template insideHTML 获取到组件

    我想将 ng template 的 insideHTML 获取到我的组件 就像是 HTML
  • 如果不在异步测试执行区域内,fixture.whenStable() 实际上会在我的角度测试中执行任何操作吗?

    我最近读了很多关于角度测试的文章 这些对总是 async fixture whenStable 和 fakeAsync tick 但是您始终可以调用 fixtrue whenStable 因为它不是紧密耦合的 如果您在不使用异步实用程序来跟
  • 如何使用签名网址将文件上传到谷歌云存储桶

    我正在开发一个 Angular 应用程序 用于显示谷歌云存储桶的内容 对于后面 我在nodeJS中使用谷歌云功能 正如他们在上传文件的文档中提到的 我创建了一个函数来生成签名 url 但是当我使用签名 url 发送文件时 我在浏览器中收到了
  • 如何检测角度7中的url变化包括参数和查询参数

    我需要检测一个组件中路径参数和查询参数的 url 更改 path category key component CollectionPageComponent 最后的网址将是例如类别 T恤 or 类别 T 恤 页 2我需要根据类别获取所有产
  • Angular 2 CLI - 部署

    我使用 Angular 2 CLI 构建了 Angular 2 应用程序 我现在的问题是我想将应用程序部署到本地服务器作为暂存环境以供其他人查看 大多数使用 Angular 2 CLI 的教程都展示了dist该文件夹似乎是在首次使用 CLI
  • 角 2 材料容器固定不工作

    我对 CSS 和 Angular 2 材质有疑问 任何固定定位元素的行为都不像固定在 md sidenav container 内 如果它不在容器内 则它可以正常工作 这是该问题的链接 只需将 md toolbar 复制并粘贴到容器内部 您
  • Ionic 3:菜单切换总是被隐藏

    我已经在 Ionic 3 中实现了汉堡菜单 但我遇到了一个问题 当我在 Android 设备上运行该应用程序时 汉堡菜单不断消失 即打开侧面菜单的按钮消失了 然而 这种情况只是偶尔发生 我尝试运行该应用程序 同时使用 Google Chro
  • 使用 angularfire2 在 Firebase 实时数据库上查询数据关系

    我需要查询评论并仅请求 userId 在评论中列出的用户 我在 Firebase 实时数据库中的数据库结构 comments c id1 commentId c id1 commentText text userId u id1 c id2
  • 聚合物纸下拉菜单在浏览器中未正确呈现

    我对简单的纸张下拉菜单的渲染 html 遇到问题 列表项并不显示为样式化的 菜单 而只是出现在页面上的项目列表 单击渲染的纸张输入组件 渲染的下拉列表的一部分 确实会为波纹设置动画 但不会为菜单和菜单项的显示 隐藏设置动画 单击列表中的某个
  • 在 Angular 2 中的 for...of 指令中获取索引

    到目前为止 有没有办法获取可迭代对象的当前索引for ofAngular 2 中的指令 换句话说 相当于 index在 Angular js v1 中 代码示例 ul li index task label li ul 当然这段代码不起作用

随机推荐

  • 在rails 4中重构大型routes.rb文件

    我正在将 Rails 3 应用程序升级到 Rails 4 0 1 在我的 Rails 3 应用程序中 我的目录中有以下代码application rb使用多个路由文件 config paths config routes Dir Rails
  • Mysql:将日期从“dd/mm/yyyy”转换为“yyyymmdd”

    我正在开发一个数据库 该数据库将日期存储在varchar 10 mysql 字段 太悲伤了 我无法更改数据库结构 我正在构建一个小插件 但我必须查询数据库 查找该数据字段在接下来的 10 天内的行 Example fid fdate 1 1
  • 基于应用程序变体的构建配置(BuildType + Flavor)

    我正在尝试设置signingConfig manifestPlaceholders buildConfigField对于应用程序变体 我可以为每个构建类型设置它们or ProductFlavor 独立 但我需要的是根据两个 ProductF
  • JS/jQuery 图像编辑器

    有没有人偶然发现用纯 JS 或 jQuery 完成的图像编辑器 就像 CKEditor 那样 我正在寻找一段代码 为图像添加句柄 以便您可以根据需要调整其大小 甚至拖动图像 谢谢 Edit 改写了 这是很棒的图像裁剪 调整大小 JQuery
  • 如何对Spark Structured Streaming进行单元测试?

    我想了解 Spark 结构化流的单元测试方面 我的场景是 我从 Kafka 获取数据 并使用 Spark 结构化流处理并在数据之上应用一些转换来使用它 我不确定如何使用 Scala 和 Spark 对此进行测试 有人可以告诉我如何使用 Sc
  • 如何将 Monad 实例定义为具有多个值的类型?

    我所说的多个值的意思是这样的 data Foo a Bar a Baz a a 我想不出一个明确的方法来定义 gt gt for Baz instance Monad Foo where Bar x gt gt f f x Great th
  • 如何在单击第 3 方按钮时设置断点?

    我正在尝试调试第 3 方小部件 1按钮准确地说 具体来说 我想在 Chrome 中设置一个断点 当单击小部件中的按钮时该断点会停止 我想打破处理的第 3 方代码click事件 是否有 Chrome 扩展 或其他我没有想到的东西 来帮助我在代
  • 为什么 System.Convert 有接受 DateTime 的 ToDateTime?

    Summary Returns the specified System DateTime object no actual conversion is performed Parameters value A date and time
  • Codeigniter 2.1 - 插入批次后返回 ids

    如何返回 insert bunch 之后的所有 ID 功能 public function insert slike id slike folder polje tabela slike explode slike i 1 data arr
  • Mathematica 中的错误:正则表达式应用于很长的字符串

    在下面的代码中 如果字符串 s 附加到大约 10 或 20 000 个字符 Mathematica 内核段错误 s This is the first line MAGIC STRING Everything after this line
  • 使用内联汇编在 C 中添加值

    我试图掌握 C 中内联汇编 ATT 汇编 的基础知识 所以我通过添加 2 个变量进行练习 好的 这按预期工作 这src变量被复制到dst变量 然后是dst变量加 5 的值src and dst分别为1和6 int src 1 int dst
  • IOS 5 如何更改导航栏中后退按钮的颜色?

    I want to change the color of back button of a navigation bar to make it look like this Set the backBarButtonItem s tint
  • Javascript 中与 64 位整数的按位 AND

    我正在寻找一种在 JavaScript 中对 64 位整数执行按位 AND 的方法 JavaScript 会将其所有双精度值转换为带符号的 32 位整数以执行按位运算 详细信息在这里 Javascript 将所有数字表示为 64 位双精度
  • 在 QMake 中设置 RPATH 顺序

    我有一个 Linux Qt 程序 我希望它优先使用可执行文件目录中的 动态 Qt 库 如果存在 否则使用系统的 Qt 库 RPATH 来救援 我将此行添加到qmake的 pro 文件 QMAKE LFLAGS Wl rpath ORIGIN
  • Visual Studio 2010 无法识别 .cshtml 文件

    我最近重新安装了 Visual Studio 2010 因为这样做我不知道如何让它再次识别 cshtml 文件 我尝试安装 MVC 3 但它说它已经安装了 基本上当我打开 cshtml 文件时Visual Studio 它们没有代码高亮或智
  • DRF:如何将 django-rest-framework-jwt 集成到 Djoser

    我计划构建一个应用程序Django 休息框架 我更感兴趣的是使用Django Rest Framework JWT认证机制比Session or Token认证机制 但所有其他包都喜欢Django Rest Auth and Djoser
  • 如何获取URI的最后一个路径段

    我有一个字符串作为输入URI 如何获得最后一个路径段 在我的例子中是一个 id 这是我输入的网址 String uri http base path some segment id 我必须获得我尝试过的 id String strId ht
  • 如何在iOS中获取CSRF令牌?

    因此 我尝试将表单数据发布到我同事的网站 以便从我的 iPhone 应用程序登录 简单的用户名和密码 但是 我似乎需要 CSRF 令牌才能发帖 我对此做了很多研究 并且从中我可以从csrftoken cookie 我在这里读到 https
  • 在 Windows/Apache 上设置 Python?

    我想要一个简单的 Python hello world 网页脚本在 Windows Vista Apache 上运行 但遇到了不同的障碍 我用的是WAMP 我已经安装了mod python并且模块显示 但我不太确定我应该做什么 例如http
  • 反应式表单数组 - 推送新元素时避免验证错误

    我有一个由单个表单数组组成的表单组 ngOnInit this deviceDetailsFormGroup this formBuilder group deviceDetails this formBuilder array this