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

angular 7 reactive forms:为表单中的每个输入字段动态添加/删除输入字段

Angular 7 Reactive Forms是Angular框架中的一种表单处理方式,它允许开发者动态地添加或删除输入字段。下面是对这个问题的完善且全面的答案:

Angular 7 Reactive Forms是一种基于响应式编程的表单处理方式,它允许开发者以响应式的方式处理表单数据。相比于模板驱动表单,它提供了更强大和灵活的功能。

在Angular中,Reactive Forms通过FormControl、FormGroup和FormArray等类来管理表单控件。FormControl用于管理单个输入字段的值和验证规则,FormGroup用于管理一组相关的输入字段,FormArray用于管理动态添加或删除的输入字段数组。

动态添加/删除输入字段是Reactive Forms的一个重要特性。通过使用FormArray,开发者可以在运行时动态地添加或删除输入字段。这对于需要根据用户需求动态生成表单的场景非常有用,例如动态表单、问卷调查等。

在Angular 7中,可以通过以下步骤实现动态添加/删除输入字段:

  1. 创建一个FormArray对象,并将其初始化为空数组。
  2. 在模板中使用*ngFor指令遍历FormArray中的每个输入字段,并为每个字段创建相应的表单控件。
  3. 通过点击按钮或其他交互方式,调用相应的方法来添加或删除FormArray中的输入字段。
  4. 在方法中,使用FormBuilder的方法(如push、removeAt等)来添加或删除FormArray中的表单控件。

以下是一个示例代码:

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

@Component({
  selector: 'app-form',
  template: `
    <form [formGroup]="myForm">
      <div formArrayName="inputs">
        <div *ngFor="let input of inputs.controls; let i = index">
          <input [formControlName]="i">
          <button (click)="removeInput(i)">删除</button>
        </div>
      </div>
      <button (click)="addInput()">添加</button>
    </form>
  `,
})
export class FormComponent {
  myForm: FormGroup;

  constructor(private fb: FormBuilder) {
    this.myForm = this.fb.group({
      inputs: this.fb.array([]),
    });
  }

  get inputs() {
    return this.myForm.get('inputs') as FormArray;
  }

  addInput() {
    this.inputs.push(this.fb.control(''));
  }

  removeInput(index: number) {
    this.inputs.removeAt(index);
  }
}

在上述示例中,我们使用FormBuilder创建了一个名为myForm的FormGroup,并在其中创建了一个名为inputs的FormArray。通过*ngFor指令,我们遍历inputs中的每个输入字段,并为每个字段创建了一个input元素和一个删除按钮。通过点击添加按钮,调用addInput方法可以动态地添加输入字段;通过点击删除按钮,调用removeInput方法可以删除指定位置的输入字段。

对于Angular开发者,掌握Angular 7 Reactive Forms可以帮助他们更好地处理表单数据,并实现动态添加/删除输入字段的功能。这在许多应用场景中都非常有用,例如动态表单、问卷调查、多步骤表单等。

腾讯云提供了一系列与Angular开发相关的产品和服务,例如云服务器、云数据库、云存储等。具体推荐的产品和产品介绍链接地址可以根据实际需求和项目情况进行选择。

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

相关·内容

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

四、Step by Step 4.1、表单简介 用来处理用户的输入,通过从视图中捕获用户的输入事件、验证用户输入的是否满足条件,从而创建出表单模型修改组件中的数据模型,达到获取用户输入数据的功能 模板驱动表单...将数据值和一些对于用户的行为约束(某个字段必须填啊、某个字段长度超过了长度限制啊)绑定到组件的模板中,从而完成与用户的交互 4.2.1、模板驱动表单的双向数据绑定 在根模块中引入 FormsModule...4.2.3、数据的有效性验证 某些时候需要对于用户输入的信息做有效性验证,此时可以在控件上添加上原生的 HTML 表单验证器来设定验证条件,当表单控件的数据发生变化时,angular 会通过指令的方式对数据进行验证...使用 FormBuilder 构建的控件,每个控件名对应的值都是一个数组,第一个值为控件的默认值,第二项和第三项则是针对这个值设定的同步、异步验证方法 import { Component, OnInit...在模板驱动表单中,因为不是直接使用的 FormControl 实例,因此这里应该在模板上添加一个自定义的指令来完成对于控件数据的校验 使用 angular cli 创建一个用来进行表单验证的指令 ng

18.9K20

AngularDart4.0 指南- 表单 顶

这个表格中的三个字段中的两个是必需的。 遵循材料设计准则,必填字段带有星号(*)。 如果您删除了英雄名称,表单将以吸引人注意的风格显示验证错误: ?...使用ngModel双向数据绑定语法将数据属性绑定到每个表单控件。 为每个表单输入控件添加一个ngControl指令。 添加自定义CSS来提供视觉反馈。 显示和隐藏验证错误消息。...添加angular_forms Angular表单功能位于angular_forms库中,该库位于其自己的包中。 将该包添加到pubspec依赖项: ?...你还没有使用Angular。 没有绑定或额外的指令,只是布局。 在模板驱动的表单中,如果已经导入了angular_forms库,则不必为了使用库功能而对标记执行任何操作。...当你完成的时候,你留下一张纸条扔掉它。 关注绑定语法:[(ngModel)] =“...”。 现在运行应用程序并输入名称输入,添加和删除字符。 您会看到这些字符出现在诊断文本中并消失。

17.5K30
  • Angular 2 表单(上)

    利用 Angular 模板,我们可以创建各种类型表单,例如:登录表单,联系人表单,商品详情表单等,而且我们也为这些表单的字段添加数据校验。 接下来我们一步步来实现表单的功能。...解压后,修改目录名为angular-forms,修改 angular-forms/package.json 文件中的 "name": "angular-quickstart" 为 "name": "angular-forms...: number ) { } } 以下代码中,标为 public 的为公有字段,alexa 后添加一个问号(?)表示可选字段。...创建一个表单组件 每个 Angular 表单分为两部分:一个基于 HTML 的模板,和一个基于代码的组件,它用来处理数据和用户交互。...在 angular-forms 目录下输入以下命令: cnpm install bootstrap --save 打开 index.html 文件,把以下样式链接添加到 中: <link

    1.5K10

    Angular 6.x 表单快速入门

    Angular 中有两种表单: Template Driven Forms - 模板驱动式表单 (类似于 AngularJS 1.x 中的表单 ) Reactive Forms - 响应式表单 Template...比较灵活 适用于复杂的场景 简化了HTML模板的代码,把验证逻辑抽离到组件类中 手动创建 Form Model (同步) 方便的跟踪表单控件值的变化 易于动态添加表单控件 易于单元测试 本文主要介绍...第一节 - 创建最简单的输入框 如何实现双向绑定? 在 Angular 表单中,我们通过 ngModel 指令来实现双向绑定。...ngModelGroup 指令是 Angular 表单中提供的另一特殊指令,可以对表单输入内容进行分组,方便我们在语义上区分不同性质的输入。...在 Angular 表单中,若验证通过则会在表单控件上添加 ng-valid 类,若验证失败则会在表单控件上添加 ng-invalid 类。

    4.6K20

    Angular系列教程-第四节

    1.表单 Angular 提供了两种不同的方法来通过表单处理用户输入:响应式表单和模板驱动表单。...两者都从视图中捕获用户输入事件、验证用户输入、创建表单模型、修改数据模型,并提供跟踪这些更改的途径 使用’@angular/forms’库中的FormGroup, FormControl,FormArray...,FormBuilder 等类构建出的数据对象就是响应式的表单,在响应式的表单中,我们会在数据源里面进行各种操作,像添加校验等,在html文件中使用 formGroup,formGroupName,formControlName...)]来将表单的数据和和视图进行双向绑定,NgForm 指令为 form 增补了一些额外特性。...总结 响应式表单是动态的,模板驱动表单是固定的 2.响应式表单使用 注册ReactiveFormsModule 组件导入FormControl 模板中注册组件 控件的值(获取setvalue

    2.8K50

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

    运行时编译 Worker服务模板 gRPC模板 Angular模板已更新为Angular 7 SPA认证 SignalR与Endpoint路由集成 SignalR Java客户端支持长轮询 其他详细信息和已知问题...Forms&validation 此预览版本添加了用于处理表单和验证的内置组件和基础结构。 使用. net进行客户端web开发的一个好处是能够在客户端和服务器之间共享相同的实现逻辑。...,并运行它,你将获得一个基本表单,该表单在字段更改和表单提交时自动进行字段输入值的验证。...每个表单字段都是使用一组内置的输入组件(InputText, InputNumber, InputCheckbox, InputSelect等)定义的。...运行时验证 对运行时编译的支持已从.NET Core 3.0中的ASP.NET核心共享框架中删除,但现在可以通过向应用程序添加包的方式来启用它。

    22.7K10

    Angular 结合 NG-ZORRO 快速开发

    这是我参与「掘金日新计划 · 4 月更文挑战」的第7天。 连更的这几天的文章,我们已经了解了不少 angular 的知识点了,这次我们来个小成品。...思路: 先添加页面 user 用户的列表页面,使用 ng-zorro 中 table 组件 用户的新增和更改页面可以共用同一个页面,使用 ng-zorro 中 form 组件 页面删除功能直接使用弹窗提示...这两个功能是公用一个表单的~ 我们在 html 中添加: // user-info.component.html 为 false 值,表示是编辑的状态,对内容进行表单的回填。...提交表单的操作也是按照该标志符进行判断。我们直接对 localStorage 的信息进行变更,以保证同步列表信息。 删除功能 我们引入模态对话框进行询问是否删除。

    1.8K10

    Angular17 使用 ngx-formly 动态表单

    ngx-formly 是 Angular 应用实现响应式的动态表单框架,不仅支持自动生成表单、易于上手的自定义字段扩展、自定义验证扩展、支持 Formly Schema 和 JSON Schema,还有开箱即用的内置表单主题...; 使用 Formly 内置验证: 在新用户注册表单的基础上增加输入年龄字段的配置,再为每个字段配置的 props 增加 required 属性,表示这是一个必填的字段,就像新用户注册表单中用户名字段一样...label}仅支持录入中文`, }, }, } 为字段添加自定义验证函数: 接着为新注册用户表单添加新的字段:邮箱、身份证、手机号,分别非这三个字段自定义校验函数: 全局注册自定义校验函数,...CardPanel 组件类,但要记得将 CardPanel 组件提前注册后再使用; 创建自定义 Extensions 自定义扩展可以为实现动态表单提供更加便利的帮助,如在系统中通常相同 key 的表单需要对应相同的...label 字段,如果在前期考虑不好的话容易造成后期维护的困难,这里就可以考虑通过自定义扩展在生成动态表单前自动匹配 label 字段。

    71310

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

    前言 表单在整个系统中的作用相当重要,这里主要扯下响应表单的实现方式。...首先需要操作表单的模块引入这两个模块; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; ---- 表单控件响应的几种状态...; 在Submit()函数内,在点击提交的时候对整个表单一一去判断,传统方式基本这样 每个控件输入的时候对应去触发对应的事件做校验,比如[ngModelChange]来处理双向绑定的值校验 ---- 数据驱动.../core'; import { FormGroup, Validators, FormBuilder } from '@angular/forms'; // 引入表单的一些特性 import { Router..., FormBuilder } from '@angular/forms'; // 引入表单的一些特性 // 动画 import { fadeIn } from '../../../../..

    3.8K20

    angular面试题及答案_angular面试

    指令分类 组件:用于构建UI组件,继承于Directive类 属性指令:用于改变组件的外观或行为 ngClass ngStyle 结构指令:用于动态添加或删除DOM元素来改变DOM布局 ngIf ngFor...angular路由器使用base href 作为组件、模板的基地址,开发期间,通常会在index.html所在目录中启动服务器,所以这个目录就是根目录,所以可以在index.html 的顶部添加输入属性发生变化的时候调用,并且ngOnInit是在ngOnchanges执行之后才调用,而constructor是在组件实例化的时候就调用了,也就是说,在constructor中是取不到输入属性的值的...32.模板驱动表单和 响应式表单的比较 Template-Driven Forms (模板驱动表单) 的特点 使用方便 适用于简单的场景 通过 [(ngModel)] 实现数据双向绑定...最小化组件类的代码 不易于单元测试 Reactive Forms (响应式表单) 的特点 比较灵活 适用于复杂的场景 简化了HTML模板的代码,把验证逻辑抽离到组件类中

    11.3K120

    Angular 2 表单(下)

    每一个 input 元素都有一个 name 属性, Angular 的表单模块需要使用它为表单注册控制器。 运行以上实例输出结果如下: {{diagnostic}} 只是用于测试时候输出数据使用。...ng-invalid 这样我们就可以添加自定义 CSS 来反应表单的状态。...在 angular-forms 目录下创建 forms.css 文件,代码如下: forms.css 文件: .ng-valid[required], .ng-valid.required { border-left...删除掉 name 字段的数据,显示结果如下所示: 添加一个网站 接下来我们创建一个用于添加网站的表单,在 app/site-form.component.html 添加一个按钮: app/site-form.component.html...当我们添加一个新的网站时,它把 active 标记设置为 false , 然后通过一个快速的 setTimeout 函数迅速把它设置回 true 。

    1.7K10

    Django Form的使用

    是有特殊规律的,我们可以通过这些 id 进行一些 js 操作 问题总结 在这次项目需求中,我主要遇到的问题是,有几个表单页面,后台使用同一张表去做存储,但是每个页面有许多变化的元素,如果为了存储这些可变的值...,每个元素都用数据库一个字段去做存储不太现实,因为需求是一直在变化的。...这样遇到了一些问题,总结如下: forms.Form 的初始化 有两种初始化方式: # 第一种方式: # 初始化一个空的 form 表单,同时绑定页面上的表单输入值,即能接受页面上的输入值 # 能接受页面上的输入值...另外我准备一个实现添加用户的小 demo ,基本字段要求如下: 姓名,必输,长度不超过20 年龄,必输,不能为负数 头像,必输,大小不超过 200 K 电话,非必输,仅做数字校验 性别,下拉框,0为未知...、1为男、2为女,默认为0 住址,非必输 基本操作如下: 可新增 可编辑 可删除 demo 中分别用 ModelForm 和 Form 来实现这个功能,感兴趣的可添加微信,回复“form demo” 获取

    2.3K20

    django 1.8 官方文档翻译:5-1-4 内建的Widget

    Widgets Widget 是Django 对HTML 输入元素的表示。Widget 负责渲染HTML和提取GET/POST 字典中的数据。 小贴士 不要将Widget 与表单字段搞混淆。...表单字段负责验证输入并直接在模板中使用。Widget 负责渲染网页上HTML 表单的输入元素和提取提交的原始数据。但是,Widget 需要赋值给表单的字段。...指定Widget 每当你指定表单的一个字段的时候,Django 将使用适合其数据类型的默认Widget。若要查找每个字段使用的Widget,参见内建的字段文档。...设置Widget 实例的样式 如果你想让某个Widget 实例与其它Widget 看上去不一样,你需要在Widget 对象实例化并赋值给一个表单字段时指定额外的属性(以及可能需要在你的CSS 文件中添加一些规则...“解压”的基本原理是需要“分离”组合的表单字段的值为每个Widget 的值。

    5K40

    关于“Python”的核心知识点整理大全55

    将显示所有主题的页面中的每个主题都设置为链接 在浏览器中查看显示特定主题的页面前,我们需要修改模板topics.html,让每个主题都链接 到相应的网页,如下所示: topics.html...我们不想让用户与管理网站交互,因此我 们将使用Django的表单创建工具来创建让用户能够输入数据的页面。 19.1.1 添加新主题 首先来让用户能够添加新主题。...用于添加主题的表单 让用户输入并提交信息的页面都是表单,那怕它看起来不像表单。用户输入信息时,我们需 要进行验证,确认提供的信息是正确的数据类型,且不是恶意的信息,如中断服务器的代码。...我们创建一个TopicForm实例(见2),将其存储在变量form中,再通过上下文字典将这个表单发 送给模板(见7)。...函数is_valid() 核实用户填写了所有必不可少的字段(表单字段默认都是必不可少的),且输入的数据与要求的 字段类型一致(例如,字段text少于200个字符,这是我们在第18章中的models.py

    16610

    在 React 表单开发时,有时没有必要使用State 数据状态

    说到在React中处理表单,最流行的方法是将输入值存储在状态变量中。遵循这种方法的原因之一是因为毕竟它是React,每个人都倾向于使用它附带的hooks。...App 组件中,并打开 http://localhost:5173 正如你所看到的,表单组件大约被渲染了23次,随着输入字段数量的增加,这个数字会逐渐增加。...使用FormData的优势 表单输入值会自动捕获,无需为每个输入字段维护状态变量。 使用 FormData 时,API请求体可以很容易地构建,而使用 useState 时,我们需要组装提交的数据。...FormData 支持的一项功能是它会自动处理动态字段。...即,如果您的表单具有动态生成的字段(根据用户输入添加/删除字段),使用 useState 管理它们的状态需要额外处理,而 FormData 会自动处理这些。

    41630

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

    Angular告诉我们,我们仍然需要在Card组件中定义我们的输入。...通过使用formControlName,我们告诉Angular我们应该使用哪种反应形式的字段。 就目前而言,以前的方法与模板驱动的表单和反应形式的新方法之间的主要区别在于反应方面的更多编码。...如果我们不需要动态定义表单,它真的值得吗? 它绝对是。要理解它可能会有所帮助,我们首先讨论为什么这种方法被称为“被动”。...我们还需要case cards.ADD:从我们的减速器中删除分支。让我们尝试一下: ? 出于某种原因,我们在卡片添加操作中获取重复的数据。让我们试图找出原因。...如果您想采取更先进的措施,请尝试使用Angular 4 Forms:由Toptaler Igor Geshoki进行嵌套和输入验证。 理解基础知识 我们为什么要使用Angular?

    42.7K10
    领券