Angular 4 Form FormArray 添加按钮以添加或删除表单输入行

2023-12-03

我正在使用 Angular 4.0.2 构建一个应用程序。如何向表单添加按钮以添加新的输入行和删除按钮以删除特定行?我的意思是我想要一个像这样的表格。我希望我的表格看起来像这样:

Form Image.

这是我的代码:

添加发票.component.html

    <h3 class="page-header">Add Invoice</h3>
    <form [formGroup]="invoiceForm">
      <div formArrayName="itemRows">
        <div *ngFor="let itemrow of itemRows.controls; let i=index" [formGroupName]="i">
          <h4>Invoice Row #{{ i + 1 }}</h4>
          <div class="form-group">
            <label>Item Name</label>
            <input formControlName="itemname" class="form-control">
          </div>
          <div class="form-group">
            <label>Quantity</label>
            <input formControlName="itemqty" class="form-control">
          </div>
          <div class="form-group">
             <label>Unit Cost</label>
             <input formControlName="itemrate" class="form-control">
          </div>
          <div class="form-group">
            <label>Tax</label>
            <input formControlName="itemtax" class="form-control">
          </div>
          <div class="form-group">
            <label>Amount</label>
            <input formControlName="amount" class="form-control">
          </div>
          <button *ngIf="i > 1" (click)="deleteRow(i)" class="btn btn-danger">Delete Button</button>
        </div>
      </div>
      <button type="button" (click)="addNewRow()" class="btn btn-primary">Add new Row</button>
    </form>
    <p>{{invoiceForm.value | json}}</p>

这是我的 add-invoice.component.ts 代码

import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormControl, FormArray, FormGroup } from '@angular/forms';

@Component({
  selector: 'app-add-invoice',
  templateUrl: './add-invoice.component.html',
  styleUrls: ['./add-invoice.component.css']
})

export class AddInvoiceComponent implements OnInit {
  invoiceForm: FormGroup;

  constructor(
    private _fb: FormBuilder
  ) {
    this.createForm();
  }

  createForm(){
    this.invoiceForm = this._fb.group({
      itemRows: this._fb.array([])
    });
    this.invoiceForm.setControl('itemRows', this._fb.array([]));
  }

  get itemRows(): FormArray {
    return this.invoiceForm.get('itemRows') as FormArray;
  }

  addNewRow(){
    this.itemRows.push(this._fb.group(itemrow));
  }

  ngOnInit(){

  }
}

这是代码的缩短版本:

当您初始化表单时,您可以在 formArray 中添加一个空表单组:

ngOnInit() {
  this.invoiceForm = this._fb.group({
    itemRows: this._fb.array([this.initItemRows()])
  });
}

get formArr() {
  return this.invoiceForm.get('itemRows') as FormArray;
}

然后函数:

initItemRows() {
  return this._fb.group({
    // list all your form controls here, which belongs to your form array
    itemname: ['']
  });
}

这里是addNewRow and deleteRow功能:

addNewRow() {
  this.formArr.push(this.initItemRows());
}

deleteRow(index: number) {
  this.formArr.removeAt(index);
}

您的表单应如下所示:

<form [formGroup]="invoiceForm">
  <div formArrayName="itemRows">
    <div *ngFor="let itemrow of formArr.controls; let i=index"  [formGroupName]="i">
      <h4>Invoice Row #{{ i + 1 }}</h4>
      <div>
        <label>Item Name</label>
        <input formControlName="itemname">
      </div>
      <button type="button" (click)="deleteRow(i)" *ngIf="formArr.controls.length > 1" >
        Delete
      </button>
    </div>
  </div>
  <button type="button" (click)="addNewRow()">Add new Row</button>
</form>

这是一个

DEMO

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

Angular 4 Form FormArray 添加按钮以添加或删除表单输入行 的相关文章

  • 将 MS-Access 表单结果导出到 Excel?

    我对 Access 有点陌生 我在将 MySQL 和 Oracle 与 PHP 集成以创建基于 Web 的数据库搜索引擎方面拥有一些经验 但我很难理解 Access 的某些概念 我有一个小型数据库 其中包含大约 200 个条目 每个条目有
  • Angular Firebase 电子邮件验证验证后错误

    我正在使用电子邮件和密码设置授权功能 一切正常 但当我创建新用户时 应用程序会发送一封带有验证链接的电子邮件 验证电子邮件地址后 我想登录 以便返回登录表单 emial verified 保持在 假 状态 在我硬重新加载页面后 这是 真 但
  • Angular 7 Guard 重定向仅适用于双击

    问题是我已经实现了一个 Guard 旨在处理特定的目录 如果当前用户名的角色等于 2 它应该返回 true 如果没有 那么它不应该重定向 这是我的 app routing module ts 文件 问题出在 userlist 路径中 我们是
  • 将 Angular v12 升级到 v13 时出现“模块未找到”错误

    嗨 开发者和贡献者 我正在努力找出以下错误的问题所在 src app models type ModelType ts 2 0 44 错误 找不到模块 错误 导出字段无法解析目录 请求为 当我将 Angular 版本从 v12 升级到 v1
  • 如何将 django ModelForm 字段显示为不可编辑

    接受我的初步教训django ModelForm 我想让用户能够编辑博客中的条目 BlogEntry has a date postedTime title and content 我想向用户展示一个编辑表单 其中显示所有这些字段 但仅包含
  • Angular 2 组件:子对子通信

    我的 Angular 2 应用程序中有三个组件 C0 C1 和 C2 第一个 C0 表示一个 html 模板 具有多个子组件 ui 元素 现在 如果有人点击C1 中的按钮 菜单 我怎样才能通知C2 日历 关于那件事 我尝试了一些例子组件通讯
  • 将打字稿中的字符串转换为时间格式

    我必须将服务器数据转换为字符串格式13 47 to 01 47PM但我正在尝试 time date hh MM and task time date shortTime 但它显示日期管道错误和参数错误 运行时错误 InvalidPipeAr
  • AOT 编译器 - 包括延迟加载的外部模块

    我试图将外部模块 托管在 git npm 存储库中 作为延迟加载模块包含在我的 Angular 应用程序中 我正在使用 ngc 编译器编译我的外部模块 node modules bin ngc p tsconfig aot json 这是我
  • 一个输入字段,多个名称

    在 HTML 表单中 如何从一个输入字段获取两个姓名 是否可以通过隐藏的输入字段 如何 我试图使隐藏字段值动态等于非隐藏字段值 这样无论用户写什么 它们都相等 但我确信它不起作用 而不是像这样的东西是否会起作用工作 Here http ww
  • ng 测试在角度通用错误“不完整:未找到规格,用种子 48751 随机化”中失败

    在运行 ng test 命令时将 Angular 7 项目转换为 Angular Universal 错误为 Incomplete No specs found randomized with seed 48751 尝试了不同的方式在 st
  • 导入 ng2-datetime 时遇到问题

    我正在尝试将 ng2 datetime 导入到我的应用程序中 因为它似乎是唯一可用的日期选择器弹出窗口 可以让您限制日期范围 无论如何 根据其文档 https www npmjs com package ng2 datetime 我安装了n
  • Rails 中多表单复选框的数据库结构

    我正在开发一个 Rails 应用程序 允许用户创建时间表 这样做时 他们应该能够选择事件发生在一周中的哪几天 我计划在表单中执行此操作的方式是每个工作日旁边有一个复选框 如下所示 etc 然而 我发现这可能不是处理这个问题的非常有效的方法
  • 如何在Electron App中调用C# dll方法?

    我有一个电子应用程序 可以从读卡器读取信用卡详细信息 他们提供了一个 c dll 来与应用程序交互 我不知道如何从电子应用程序读取 dll 方法 首先使用以下命令检查 dll 中公开的函数依赖步行者 http www dependencyw
  • 角度分割列表

    我有一个看起来像这样的列表 A B C 是否有任何简单的方法 而无需创建一个函数 将其展平为一个看起来像这样的数组 A B C 我搜索了 SO 但没有找到任何带有打字稿方法的内容 Thanks 编辑 A B C 是相同类型 看来您正在寻找的
  • Angular 2 兄弟组件通信

    我有一个列表组件 当在 ListComponent 中单击某个项目时 该项目的详细信息应显示在 DetailComponent 中 两者同时出现在屏幕上 因此不涉及路由 如何告诉详细组件列表组件中的哪个项目被单击 我考虑过向父级 AppCo
  • 模块构建失败时出现错误(来自 ./node_modules/@angular-devkit/build-angular/node_modules/mini-css-extract-plugin/dist/loader.js)

    当我跑步时ng build prod得到这个错误 它可以正常运行 但无法构建 我中继与此相关 ERROR in Module build failed from node modules angular devkit build angul
  • Angular 11 > 12 TypeError:无法读取未定义的属性“匹配”

    我刚刚使用以下提供的步骤将我的角度应用程序从 Angular 11 升级到 12https update angular io https update angular io 我能够编译并运行 然而 当我跑步时npm test 我的所有测试
  • 使用 Angular 2 Forms 根据需要动态标记字段的正确方法是什么?

    使用 Angular 2 2 0 0 推荐的方法是什么动态地根据需要标记字段 使用角形式 https angular io docs ts latest guide forms html 在他们的所有示例中 只需添加必需的属性 如下所示
  • 错误 TypeError:无法使用角度 6 读取 ngx-bootstrap 中 null 的属性“createText”

    我想使用以下命令从不同的组件打开 ngx bootstrap 模式 ViewChild在角度 6 但我收到此错误 错误类型错误 无法读取 null 的属性 createText 在 ComponentLoader push node mod
  • 如何通过 jQuery onblur 提交表单

    所以我尝试通过 jQuery onblur 提交表单 即一旦焦点离开密码字段 表单就会通过 jQuery 提交 有类似的问题 但这不是我要找的 我尝试使用 document getElementById 但它不起作用 任何帮助表示赞赏 提前

随机推荐

  • tf_agents 自定义 time_step_spec

    我正在修改 tf agents 但在定制时遇到问题time step spec 我正在尝试在健身房 Breakout v0 中训练 tf agent 我已经制作了一个函数来预处理观察结果 游戏像素 现在我想修改 time step 和 ti
  • Silverlight Web 服务调用在 Studio 中可以工作,但从网站运行时失败

    我们正在构建一个 Silverlight 应用程序并调用 Silverlight WCF 服务 从 Visual Studio 运行应用程序时 一切正常 当我们部署到网站并运行应用程序时 每次调用 Web 服务时 我们都会收到以下错误 或类
  • 何时使用“sbt 程序集”和“sbt 编译 && sbt 包”?

    我想知道我什么时候应该使用sbt assembly什么时候sbt compile sbt package 我正在使用 Intellij IDEA 在本地计算机上编写一个程序 并使用以下命令进行编译sbt compile sbt packag
  • 如何使用外部自定义 CSS 覆盖 Bootstrap 3 样式?

    如何使用外部自定义 CSS 覆盖 Bootstrap 3 样式 div class navbar navbar inverse navbar fixed top div CSS navbar inverse background color
  • 释放NSTimer的正确方法?

    在我的 dealloc 方法中释放 NSTimer 的正确方法是什么 它是用以下代码创建的 void mainTimerLoop mainTimer NSTimer scheduledTimerWithTimeInterval 1 10 t
  • Eclipse Luna:未调用处理程序的 @CanExecute 方法

    我在 Eclipse Luna RCP 中的命令处理程序遇到问题 在我的 E4 应用程序模型中 我定义了一些必须启用的命令和相关处理程序 仅在某些情况下 因此 在我的处理程序 POJO 中 我实现了 注释为的方法 CanExecute我在其
  • MySql 查询-日期范围内的日期范围

    我使用 mySql 5 和 IIS I have products 有一个start date场和一个end date field 我需要运行一个查询 该查询将获取用户输入的开始日期和结束日期 并输出产品在日期范围内运行的天数 Exampl
  • 列表上的哈希函数与其中项目的顺序无关

    我想要一个为一组整数分配值的字典 例如key is 1 2 3 and value会有一定的价值 事情是这样的 3 2 1 在我的情况下需要进行相同的处理 因此如果我采用散列方法 散列需要相等 该套装将包含 2 至 10 件物品 项目的总和
  • 尝试每 x 秒执行一次文件

    请查找每 10 秒重复一次的更新代码 然而问题是它每 10 秒在屏幕上创建一个新的 GUI 而不是每 10 秒只更新数据 请你给个建议 package learningfromscrach import java awt import ja
  • 使用 timepicker.js 时“timepicker 不是函数”?

    我正在尝试使用此插件将时间选择器放入表单中 http jonthornton github io jquery timepicker 看起来我所要做的就是下载库并使用 jQuery 和 jQuery ui 但到目前为止我无法让它工作 即使
  • 查找具有最大可能总和的子矩阵 O(n^2)

    我正在尝试用 Java 编写一个程序 当给定一个 MxN 矩阵时 它将找到具有最大数字和的 连续 子矩阵 然后程序需要返回子矩阵的左上角坐标和右下角坐标 矩阵可以包含负数 并且矩阵和子矩阵都不需要是正方形 我看到这里讨论了这个问题 获取总和
  • Swift 中的 URL 验证

    在我的 Swift iOS 项目中 我想在请求服务器之前检查 url 是否有效 我之前在 Objective C 代码中检查了许多元素 例如 www http https 等是否存在 以验证 url 是否正确 Swift 代码中有类似的东西
  • 微调预训练的 word2vec Google 新闻

    我目前正在使用在 Google 新闻语料库上训练的 Word2Vec 模型 来自here 由于仅在 2013 年之前对新闻进行训练 因此我需要更新向量 并根据 2013 年之后的新闻在词汇表中添加新单词 假设我在 2013 年之后有一个新的
  • 为什么移动 0 会截断小数?

    我最近发现了这段JavaScript代码 Math random 0x1000000 lt lt 0 我知道第一部分只是生成 0 到 0x1000000 16777216 之间的随机数 但第二部分似乎很奇怪 执行位移 0 有何意义 我不认为
  • 如果我从共享扩展打开包含应用程序,Apple 会拒绝吗?

    我正在使用提供的解决方案here从共享扩展中打开我的内容 尽管它很脆弱 但它似乎没有使用任何私有 API 方式来做到这一点 如果我使用我的应用程序 Apple 会拒绝它吗 有人拥有经过批准的应用程序 可以从共享扩展中打开包含应用程序的应用程
  • MySQL:截断表与从表中删除

    我们什么时候使用DELETE命令与TRUNCATE命令 我试图在互联网上查找 但两个命令都删除了数据 我看不出有什么区别 从表中删除 1 DELETE is a DML Command 2 DELETE statement is execu
  • F# 返回 ICollection

    我正在使用用 C 创建的库 我一直致力于将一些代码移植到 F 但必须使用 C 库中的相当多的基础类型 一段代码需要计算一个值列表并将其分配给类中的公共字段 属性 该字段是一个包含两个 ICollection 的 C 类 我的 F 代码工作正
  • 如何从 com.google.api.client.googleapis.json.GoogleJsonResponseException 上失败的 Cloud Dataflow 作业恢复: 410 Gone

    我的 Cloud Dataflow 作业在运行 4 小时后神秘地失败 因为工作人员抛出此异常四次 在一小时内 异常堆栈看起来像这样 java io IOException com google api client googleapis j
  • 当代码发生更改时,Visual Studio 2010 在运行前不会生成

    多年来我一直使用 F5 开始调试 来构建代码 如果它已经过时 然后进行调试 这也适用于 VS 2010 但是今天它只是在没有构建的情况下开始调试 假设我对项目进行了清理 然后按 F5 而不是构建它 以便它可以运行 它会抛出一条错误消息 指出
  • Angular 4 Form FormArray 添加按钮以添加或删除表单输入行

    我正在使用 Angular 4 0 2 构建一个应用程序 如何向表单添加按钮以添加新的输入行和删除按钮以删除特定行 我的意思是我想要一个像这样的表格 我希望我的表格看起来像这样 这是我的代码 添加发票 component html h3 c