javascript - Åtkomst till värde av formControl från formArray i reaktivt formulär i HTML


Hur får jag åtkomst till värdet av ItemName i HTML. Det står undefined när jag försöker {{invoiceForm.controls[i].items.controls.itemName.value | json}} i koden nedan.

<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>

Svar #1

Du var nästan där...

istället för:

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

Du bör skriva:

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

StackBlitz-exempel

För att kunna säga den exakta vägen att gå, kunde du bara ha skrivit ut formulärvärdet med console.log(this.invoiceForm) i ngOnInit och då kunde du ha sett att 'item' är en direkt nyckel i 'controls', ditt enda misstag var att hänvisa till invoiceForm.controls[0] vilket är fel.

Här är lite extra för att uppnå samma resultat från ts-filen (hårdkodat till det första objektet):

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

Svar #2

istället för {{invoiceForm.controls[i].items.controls.itemName.value | json}}

Prova detta i html :

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

Komponent ts-kod :

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

detta kommer inte att utlösa detta fel: Egenskapen 'controls' finns inte på typen 'AbstractControl'.

Det här fungerade i mitt fall.