No meu componente Angular, tenho um Foo
com uma propriedade bar
que é um array de string
s.
Quero editar a lista de linhas de texto no meu formulário. No meu componente, declaro
barEditForm = new FormGroup({
bar: new FormArray<FormControl>([])
});
Inicializo então meu formulário a partir do Foo
que carreguei.
foo.bar.forEach((bar: string) => {
this.barEditForm.controls.bar.push(new FormControl(bar));
});
Como posso criar um form
com um input
for each bar
no meu modelo HTML?
Esse;
<form [formGroup]="barEditForm" (ngSubmit)="onBarSave(foo.id)">
@for (bar of barEditForm.controls.bar.controls; track $index) {
<input class="form-control" id="bar" type="text" formControlName="$index"/>
}
</form>
não funciona!
Presumo que preciso iterar sobre meus controles criados, daí o for
de barEditForm.controls.bar.controls
.
Também presumo que posso usar $index
como nome do controle do formulário.
Mas recebo um erro ERROR TypeError: e is null
e uma entrada de texto vazia.
Qual é a maneira correta de fazer isso?
Você precisa definir
formArrayName
comobar
, depois definir o formControlName com a vinculação de propriedade.Outra opção é usar formControl com vinculação de propriedade que não use $index