У меня есть простая реактивная форма с FormArray, которая будет содержать FromGroups.
Я знаю, что об этом спрашивали много раз, но я до сих пор не могу понять, почему он не работает.Я перепробовал много способов.Это два упрощенных примера, вместе с тем, что я прочитал из документации и нашел в Интернете.
Компонент:
@Component({
selector: 'app-professional-info-form',
templateUrl: './professional-info-form.component.html',
styleUrls: ['./professional-info-form.component.scss']
})
export class ProfessionalInfoFormComponent implements OnInit {
protected professionalInfo: FormGroup;
constructor() { }
ngOnInit() {
this.initForm();
}
private initForm() {
this.professionalInfo = new FormGroup({
trainings: new FormArray([
new FormGroup({
institutionId: new FormControl(null, null),
title: new FormControl(null, null),
description: new FormControl(null, null),
institution: new FormControl(null, Validators.required),
grade: new FormControl(null, null),
from: new FormControl(null, Validators.required),
to: new FormControl(null, null)
})
])
});
}
}
HTML:
<form [formGroup]="professionalInfo" (ngSubmit)="onSubmit()" novalidate *ngIf="professionalInfo">
<div formArrayName="trainings">
<div *ngFor="let training of trainings.controls; index as t" [formGroupName]="t">
<input type="text" [formControlName]="title" placeholder="Titolo" />
<input type="text" [formControlName]="institution" placeholder="Istituto" />
<input type="text" placeholder="Inizio" [formControlName]="from">
<input type="text" placeholder="Fine" [formControlName]="to">
<input type="text" placeholder="Voto" [formControlName]="grade" maxlength="5">
</div>
</div>
</form>
Консольошибка:
ERROR TypeError: Cannot read property 'controls' of undefined
at Object.eval [as updateDirectives] (ProfessionalInfoFormComponent.html:19)
Если я добавлю этот метод к компоненту:
get trainingsFormArray() {
return (<FormArray>this.professionalInfo.get('trainings'));
}
И отредактирую * ngFor так:
<div *ngFor="let training of trainingsFormArray.controls; index as t" [formGroupName]="t">
Ошибка консоли:
ERROR Error: Cannot find control with path: 'trainings -> 0 -> '
Что сумасшедшего, потому что если console.log 'trainingsFormArray' после инициализации формы выдает следующее:
вывод console.log
Каждый раз, когда мне приходится работать с реактивными формами angular, я сталкиваюсь с такими проблемами, как эта.Я не могу найти последовательный способ заставить их работать с динамическими элементами управления, как в этом случае.Пожалуйста, помогите мне.