首页
学习
活动
专区
工具
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.0ASP.NET核心共享框架删除,但现在可以通过向应用程序添加方式来启用它。

    22.7K10

    Angular 结合 NG-ZORRO 快速开发

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

    1.8K10

    Angular17 使用 ngx-formly 动态表单

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

    65010

    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 顶部添加<base...是输入属性发生变化时候调用,并且ngOnInit是在ngOnchanges执行之后才调用,而constructor是在组件实例化时候就调用了,也就是说,在constructor是取不到输入属性...32.模板驱动表单和 响应式表单比较 Template-Driven Forms (模板驱动表单) 特点 使用方便 适用于简单场景 通过 [(ngModel)] 实现数据双向绑定...最小化组件类代码 不易于单元测试 Reactive Forms (响应式表单) 特点 比较灵活 适用于复杂场景 简化了HTML模板代码,把验证逻辑抽离到组件类

    11.1K120

    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

    16110

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

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

    39330
    领券