网站搜索

javascript - 在 HTML 的响应式表单中从 formArray 访问 formControl 的值


如何在 HTML 中访问 ItemName 的值。当我在下面的代码中尝试 {{invoiceForm.controls[i].items.controls.itemName.value | json}} 时,它显示未定义。

<form [formGroup]="invoiceForm">

<div formArrayName="items" *ngFor="let item of items.controls; let i=index;">

  <div [formGroupName]="i">
      <input type="text" formControlName="itemName">
      <input type="number" formControlName="itemQty">       
      <input type="number" formControlName="itemPrice">
  </div>  

  Item name:  {{invoiceForm.controls[i].items.controls.itemName.value | json}}

</div>
</form>

答案#1

你几乎到了…

而不是:

{{invoiceForm.controls[i].items.controls.itemName.value | json}}

你应该写:

{{invoiceForm.controls['items'].controls[i].controls.itemName.value | json}}

StackBlitz 示例

为了准确地说明要走的路径,你只需在 ngOnInit 中使用 console.log(this.invoiceForm) 打印表单值,然后你就会看到 'item' 是 'controls' 的直接键,你唯一的错误是引用了 invoiceForm.controls[0],这是错误的。

这里有一点额外内容,用于从 ts 文件实现相同的结果(硬编码为第一个项目):

console.log(this.invoiceForm);
const itemControls = <FormArray>this.invoiceForm.controls['items'];
const itemFormGroup = <FormGroup>itemControls.controls[0];
console.log(itemFormGroup.controls["itemName"].value);

答案#2

而不是 {{invoiceForm.controls[i].items.controls.itemName.value | json}}

在 HTML 中尝试这个:

{{getFormControlItem()[i].controls['dateofStay'].value}}

组件 ts 代码:

getFormControlItem()
{
return ((this.invoiceForm.controls['items'] as FormArray).controls as FormGroup[])
}

这不会抛出此错误:类型 'AbstractControl' 上不存在属性 'controls'。

在我的情况下,这个有效。