首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Reactive Forms:如何在Angular 7/8/9中的稍后时间点将新的FormGroup或FormArray添加到现有的FormGroup中

基础概念

Reactive Forms 是 Angular 中用于处理表单的一种方式,它提供了一种模型驱动的方式来处理表单输入。FormGroupFormArray 是 Reactive Forms 中的两个核心概念:

  • FormGroup: 表示一个表单组,可以包含多个表单控件(FormControl)或其他 FormGroup 和 FormArray。
  • FormArray: 表示一个动态数组,可以包含多个 FormControl。

相关优势

  1. 模型驱动: 数据模型和视图之间的同步是自动的,减少了手动处理 DOM 的需求。
  2. 可测试性: 由于数据和视图的分离,表单更容易进行单元测试。
  3. 灵活性: 可以动态地添加或删除表单控件。

类型

  • FormControl: 表示单个表单控件,如输入框、选择框等。
  • FormGroup: 表示一组表单控件。
  • FormArray: 表示一组动态的表单控件。

应用场景

Reactive Forms 适用于需要复杂表单逻辑的应用,如动态表单、嵌套表单、表单验证等。

如何在稍后时间点将新的 FormGroup 或 FormArray 添加到现有的 FormGroup 中

假设你已经有一个现有的 FormGroup,并且你想在稍后的时间点添加一个新的 FormGroupFormArray。以下是一个示例代码:

代码语言:txt
复制
import { Component, OnInit } from '@angular/core';
import { FormGroup, FormControl, FormArray, FormBuilder } from '@angular/forms';

@Component({
  selector: 'app-dynamic-form',
  templateUrl: './dynamic-form.component.html',
  styleUrls: ['./dynamic-form.component.css']
})
export class DynamicFormComponent implements OnInit {
  form: FormGroup;

  constructor(private fb: FormBuilder) {
    this.form = this.fb.group({
      existingGroup: this.fb.group({
        control1: [''],
        control2: ['']
      }),
      formArray: this.fb.array([])
    });
  }

  ngOnInit(): void {
    // 模拟在稍后的时间点添加新的 FormGroup
    setTimeout(() => {
      const newFormGroup = this.fb.group({
        newControl1: [''],
        newControl2: ['']
      });
      this.form.addControl('newGroup', newFormGroup);
    }, 2000);

    // 模拟在稍后的时间点添加新的 FormArray
    setTimeout(() => {
      const newFormArray = this.fb.array([
        this.fb.control(''),
        this.fb.control('')
      ]);
      this.form.setControl('newFormArray', newFormArray);
    }, 4000);
  }
}

解释

  1. 初始化表单: 使用 FormBuilder 创建一个包含现有 FormGroupFormArrayFormGroup
  2. 添加新的 FormGroup: 使用 setTimeout 模拟在稍后的时间点添加一个新的 FormGroup。通过 form.addControl 方法将新的 FormGroup 添加到现有的 FormGroup 中。
  3. 添加新的 FormArray: 同样使用 setTimeout 模拟在稍后的时间点添加一个新的 FormArray。通过 form.setControl 方法将新的 FormArray 替换现有的 FormArray

参考链接

通过这种方式,你可以在 Angular 7/8/9 中的稍后时间点动态地添加新的 FormGroupFormArray 到现有的 FormGroup 中。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Angular 从入坑到挖坑 - 表单控件概览

一、Overview angular 入坑记录笔记第三篇,介绍 angular 中表单控件相关概念,了解如何在 angular 创建一个表单,以及如何针对表单控件进行数据校验。...,并添加到根模块 imports 数组 import { BrowserModule } from '@angular/platform-browser'; import { NgModule }...,然后将控件组每一个控件作为属性值添加到实例 import { Component, OnInit } from '@angular/core'; // 引入 FormControl 和 FormGroup...类方式来简化完成表单构建 FormBuilder 服务有三个方法:control、group 和 array,用于在组件类中分别生成 FormControl、FormGroupFormArray...同模板驱动表单数据有效性验证相同,在响应式表单同样可以使用原生表单验证器,在设定规则时,需要将模板控件名对应数据值第二个参数改为验证规则 在响应式表单,数据源来源于组件类,因此应该在组件类中直接把验证器函数添加到对应

18.9K20

Angular 2 + 折腾记 :(7) 初步了解表单:模板驱动及数据驱动及脱坑要点

前言 表单在整个系统作用相当重要,这里主要扯下响应表单实现方式。...首先需要操作表单模块引入这两个模块; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; ---- 表单控件响应几种状态...(Reactive Form) 响应式表表单:原理是一开始就构建整个表单,表单值通过特殊指令formControlName一一关联(类似ngModel); 相关名词: FormGroup: 用来追踪表单控件有效状态及值...FormArray()),FormGroup()内置多种校验方式 formControlName: 同步与FormGroup构建表单内相同字段值!.../core'; import { FormGroup, Validators, FormBuilder } from '@angular/forms'; // 引入表单一些特性 import { Router

3.8K20
  • Angular8稳定版修改概述

    这允许在现代用户代理和旧用户代理经典脚本中选择性地执行模块脚本. SVG作为模板 您现在可以将SVG文件用作模板。到目前为止,我们只能选择使用内联HTML外部HTML作为模板。...Bazel将提供以下优势: 更快构建时间(对于第一次构建需要时间,但并发构建将更快),Angular已经在使用它,现在CI在7.5分钟内完成,而不是在Bazel之前60分钟。...Web Worker Angular 8添加了Web worker支持。现在,您可以添加Web worker并将要在后台运行耗时进程委派给Web worker。...,直接使用clear方法就可以完成: formArray.clear() 对Typescript 3.4.x支持 Angular现在使用TypeScript 3.3(v7使用3.2.x)。...包还是跟以前保持一样。 结论 以上就是angular 8版本一些改动。总体来说变化不是很大,延续了angular每年一个稳定版习惯。 原文链接

    4.5K20

    Angular快速学习笔记(4) -- Observable与RxJS

    订阅者函数用于定义“如何获取生成那些要发布消息”。 要执行所创建可观察对象,并开始从中接收通知,你就要调用它 subscribe() 方法,并传入一个观察者(observer)。...这些工具函数可用于: 把现有的异步代码转换成可观察对象 迭代流各个值 把这些值映射成其它类型 对流进行过滤 组合多个流 创建可观察对象函数 RxJS 提供了一些用来创建可观察对象函数。...observables Angular 中大量使用了可观察对象,作为处理各种常用异步操作接口。...; } } 响应式表单 (reactive forms) FormControl valueChanges 属性和 statusChanges 属性包含了会发出变更事件可观察对象 import...{ FormGroup } from '@angular/forms'; @Component({ selector: 'my-component', template: 'MyComponent

    5.2K20

    一个Angular 5教程:一步一步指导实现你第一个Angular 5应用程序

    它带有一个完整重写,以及各种改进,包括优化构建和更快编译时间。在这个Angular 5教程,我们将从头开始构建一个笔记应用程序。如果您一直在等待学习Angular 5,本教程适合您。 ?...并将我们组件添加到AppComponent模板: [...]...'@angular/forms'; [...] export class NewCardInputComponent implements OnInit { [...] newCardForm: FormGroup...因此,它更像是一套约定(对于那些曾经听说过Ruby on Rails约定优先配置用户,稍后会看到一些相似之处),以便我们回答我们应用程序应该如何决定它需要显示一些界面元素(可折叠侧边栏),或者它应该在从服务器接收到它会话状态后存储它位置...除了这些案例陈述之外,我们绝不应该改变我们状态,否则当我们浪费时间寻找我们代码行为不可预测原因时,它会使生活变得悲惨。 让我们将Ngrx添加到我们应用程序

    42.6K10

    使用Angular8和百度地图api开发《旅游清单》

    前言: 本文目的是通过一步步实现一个旅游清单项目,让大家快速入门Angular8以及百度地图API。...UI使用 项目简介 《旅游清单》项目的背景主要是为了让笔者更好掌握angular8,因为之前做项目主要是使用vue和react,作为一名合格coder,必须博学而专一,也是因为笔者早年大学时期想要做一个想法...官方提供架构图: 我们知道,一个完整angular应该包括: 模块 Angular 定义了 NgModule,NgModule 为一个组件集声明了编译上下文环境,它专注于某个应用领域、某个工作流一组紧密相关能力...根模块提供了用来启动应用引导机制。一个应用通常会包含很多功能模块。 组件 每个 Angular 应用都至少有一个组件,也就是根组件,它会把组件树和页面 DOM 连接起来。...= data && data.results; } 复制代码 locationServiceaddToList方法会将数据添加到清单,并存储到storage

    6K30

    angular面试题及答案_angular面试

    问题就在于请求/响应消耗了大量时间,或者是重新加载使用了大量时间。而在SPA技术,即使URL不断变化,我们也只维护一个页面(index.HTML)。 13....当observablepromise返回data时,我们使用一个临时属性来保存内容。稍后,我们将相同内容绑定到模板。...ngOnInit可以用来初始化组件之间通信异步请求等 参考:https://www.jianshu.com/p/af1d8f597b29 25....Dirty check是比较数据跟老数据差别,如果看到有改变, 就用数据更新现有的视图。 31. DOM和BOM区别是什么? Dom是document object model。...最小化组件类代码 不易于单元测试 Reactive Forms (响应式表单) 特点 比较灵活 适用于复杂场景 简化了HTML模板代码,把验证逻辑抽离到组件类

    11.1K120

    AngularDart4.0 指南- 表单 顶

    模板驱动形式 您可以通过使用本页描述特定于表单指令和技术在Angular模板语法编写模板来构建表单。 您也可以使用响应式(模型驱动)方法来构建表单。...禁用窗体提交按钮,直到窗体有效。 建立 按照设置说明创建一个名为表单新项目。 添加angular_forms Angular表单功能位于angular_forms,该库位于其自己。...你还没有使用Angular。 没有绑定额外指令,只是布局。 在模板驱动表单,如果已经导入了angular_forms库,则不必为了使用库功能而对标记执行任何操作。...Angular可不使用Bootstrap类任何外部库样式。 Angular应用程序可以使用任何CSS库不使用。...预期演示。 增加代码过后demo不会教你任何关于表单新东西。 但是这是一个锻炼一些获得绑定技巧机会。 如果您不感兴趣,请跳至本页摘要。

    17.5K30

    【译】.NET Core 3.0 Preview 3关于ASP.NET Core更新内容

    下面是该预览版更新列表: Razor组件改进: 单项目模板 Razer扩展 Endpoint路由集成 预呈现 Razor类库Razor组件 改进事件处理 Forms & validation...验证逻辑是一个很好逻辑。Razor组件Forms&validation支持包括使用数据注解处理验证支持,或者可以插入你喜欢验证系统。...此模板被设计为运行长时间运行后台进程起点,就像您可能作为Windows服务Linux守护进程运行一样。例如,从消息队列生成/消费消息,或者监视要处理文件。...Angular模板更新到了Angular 7 Angular模板更新到了Angular 7。在 .NET Core 3.0 发布稳定版本之前,我们预计会更新到Angular 8。...在本节,我们将展示如何创建一个AngularReact模板,该模板允许我们对用户进行身份验证并访问受保护API资源。

    22.7K10

    AngularDart 4.0 高级-管道 顶

    在前面的例子,你没有列出DatePipe,因为所有的Angular内置管道都是预先注册。 要在实例查看行为(查看源代码),请更改模板值和可选指数。...如果你点击reset按钮,Angular用原有英雄列表替换heroes并更新显示。 如果您添加了删除更改英雄功能,Angular会检测这些更改并更新显示。...注意如何添加一个英雄: heroes.add(hero); 您将英雄添加到英雄列表。 对列表引用没有改变。 这是同一个列表。 这都是Angular关心。...Angular忽略(复合)对象内更改。 如果您更改输入月份,添加到输入列表更新输入对象属性,它将不会调用纯管道。 这看起来很有限制,但速度也很快。...该组件可以公开一个filteredHeroessortedHeroes属性,并控制执行支持逻辑时间和频率。 您可以在管道中放置并在应用程序中共享任何功能都可以写入过滤/排序服务并注入到组件

    6.4K20

    Angular v18 现已推出!

    在改进框架同时,我们确保所有现有的 API 继续按预期工作,并且我们引入 Angular 所有内容都有一个很好互操作性故事。Zoneless 是我们互操作性方法另一个例子。...与此同时,我们还用 Material 3 主题和文档刷新了 material.angular.io。您可以在我们指南中找到如何在应用程序中使用 Angular Material 3!...开发者预览版信号 API在 Angular 版本 17.1 和 17.2 ,我们宣布了信号输入、基于信号查询和输出语法。在我们信号指南中了解如何使用 API。...同样,Angular 现在带来了越来越多以性能为中心功能,例如部分水合作用,我稍后会分享更多内容。在这两种情况下,我们都使用您功能请求和其他需求作为融合两个框架基本功能动机。...此更改将加快您 Angular CLI 安装时间。路由重定向作为函数为了在处理重定向时实现更高灵活性,在 Angular v18 ,redirectTo 现在接受返回字符串函数。

    23310

    最受推荐 9本全栈开发书籍,助web前端开发学习

    如今全栈工程师在企业工作有的地位越来越高,无论是前端工程师,还是后端工程师,都在拼命向全栈发展!...移动开发最佳实践、安全性和陷阱 这本书需要Java基本知识,但不要求具备Spring BootMySQL基础。...本书适合具有Java编程经验Web应用程序开发人员,希望使用强大前端工具(AngularJS)和Bootstrap以及流行后端框架(Spring Boot)创建企业级、可扩展Java应用程序...CSS / LESS设置前端样式,以实现响应式和友好UI界面,使用Forms和Validators处理用户输入… 7、《Full-Stack JavaScript Development》 本书全面介绍了构建三层体系结构理论...8、《Learn Full-Stack JavaScript Development》 本书将和你一起开发一个小型电子商务应用程序,用户可以在这个程序里浏览产品,将其添加到购物车,你还将创建一个完整后端

    4K10

    Angular12个经典问题,看看你能答对几个?(文末附带Angular测试)

    它是如何在Angular 2工作Angular 2不具有双向digest cycle,这是与Angular 1不同。...如何在Angular 2启用延迟加载? 大多数企业应用程序包含用各式各样用于特定业务案例模块。捆绑整个应用程序代码并完成加载,会在初始调用时,产生巨大性能开销。...启用延迟加载Plunkr示例:  我们不需要在根模块中导入声明延迟加载模块。 将路由添加到顶层路由(app.routing.ts)并设置loadChildren。...如果我们需要扩展外部库类型定义,一个好做法是,我们并非对node_modules有的typings文件夹进行改动,而是创建一个命名为“自定义类型”新文件夹,来存储所有的自定义类型。...Observable提供像map,forEach,reduce之类类似于数组运算符,还有强大运算符,retry()replay()等,使用起来是相当方便

    17.3K80

    Vue学习路线图

    响应式编程在前端开发得到了大量应用,在大多数前端MVX框架都可以看到它影子。相比较于Angular.js和React.js而言,Vue.js并没有引入太多新概念,只是对已有的概念进行了精简。...MVVM开发模式也使前端从传统DOM操作释放出来,开发者不需要再把时间浪费在视图和数据维护上,只需要关注data变化即可。...而在版本支持上,Vue.js抛弃了对IE8支持,对移动端支持也有一定要求,也即是说使用Vue.js进行移动跨平台开发时需要Android 4.2+和iOS 7+支持。...要构建一个 Vue 应用程序,你还需要知道如何在网页安装 Vue,并了解 Vue 实例生命周期等知识。 组件 其次,Vue 组件是独立可重用 UI 元素。...大多数 PWA 功能可以通过 Vue CLI 3 插件使用 Nuxt.js 等框架添加到 Vue 应用程序,但你仍然需要了解一些关键技术,包括 Web App Manifest 和 ServiceWorker

    5.7K20

    都 9012了,该选择 Angular、React,还是Vue?

    作为一款优秀 JavaScript 框架,在其推出一年后,便在全球引起了广泛关注,如今更是在Google 600 多款产品得以成功运用,Firebase控制台、谷歌分析、谷歌快车、谷歌云等。...Angular 7 虚拟滚动 命令行提示:当在CLI中键入某些命令, ng new 或者 ng add @angular/material 时,Angular 7 会提示用户,让你找到像路由SCSS...视觉风格:谷歌在Angular 7之前已于2018年更新了Material.io,用户更新后会出现细微视觉差异:,UI结构层次更为大胆、形状边角更加圆滑,五种全新 Icon 样式,以及一个非常时尚且现代化拖放模块.../ common / http Ajax请求 用于构建 @angular /forms 表单 组件CSS封装 XSS保护 用于单元测试组件实用程序 其中,依赖注入等功能作为 Angular 核心...当然,Google工程师已经意识到了这个问题,也在一定程度上致力于简化Angular框架复杂性,希望在 Angular 8 能让人耳目一

    1.9K20

    响应式脑电波 — 如何使用 RxJS、Angular、Web 蓝牙以及脑电波头戴设备来让我们大脑做一些更酷

    翻译:郑丰彧 原文地址:https://medium.com/@urish/reactive-brain-waves-af07864bb7d4 本篇译文首发于RxJS学习-知乎专栏。...Muse 2016: AF7 和 AF8 是前额电极, TP9 和 TP10 是耳电极 使用 RxJS 响应流 构建库时,我需要决定如何暴露传入脑电波数据。...Muse 设备有两个电极位于前额 (在标准 10-20定位系统称为 AF7 和 AF8),它们靠近双眼,所以我们能够轻而易举地监控眼部运动。 ?...流由两项组成:第一个是值1,它是由 Observable.of 立即发出,第二个是值0,它在500毫秒之后发出,但如果一个来自 filter 管道项到达的话,将重新启动 switchMap...可以使用 async pipe 将它绑定到 Angular 模板: ? 每当眨眼时,上面的代码会隐藏眼睛符号,或者我们可以切换 CSS 类,然后在闪烁时对眼睛符号进行颜色改变执行动画: ?

    2.3K80
    领券