Angular 2: formGroup ожидает экземпляр FormGroup. Просьба передать
Я создаю форму в Angular 2. Моя цель - получить данные из API и передать их в форму для целей редактирования. Однако я столкнулся с этой ошибкой:
ИСКЛЮЧЕНИЕ: Недоступно (в обещании): Ошибка: ошибка. /EditPatientComponent класс EditPatientComponent - встроенный шаблон: 1:10, вызванный: formGroup ожидает экземпляр FormGroup. Пожалуйста, пройдите один.
Вот текущий код с ошибкой.
HTML
<section class="CreatePatient">
<form [formGroup]="patientForm" (ngSubmit)="onSubmit()">
<div class="row">
<div class="form-group col-12 col-lg-3">
<label for="firstName">First Name</label>
<input formControlName="firstName" type="text" class="form-control" id="firstName" >
</div>
<div class="row">
<div class="col-12 col-lg-2">
<button type="submit" name="submit" class="btn btn-block btn-primary">Save</button>
</div>
</div>
</form>
</section>
ц
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { FormBuilder, FormGroup, FormControl } from '@angular/forms';
import { PatientService } from './patient.service';
import { Patient } from './patient';
@Component({
templateUrl: 'editpatient.component.html'
})
export class EditPatientComponent implements OnInit {
errorMessage: string;
id: string;
editMode = true;
private patientForm: FormGroup;
private patient: Patient;
constructor(
private patientService: PatientService,
private router: Router,
private activatedRoute: ActivatedRoute,
private formBuilder: FormBuilder) {
console.log("routes");
console.log(activatedRoute.snapshot.url[1].path);
}
ngOnInit() {
this.getPatient();
}
getPatient() {
this.patientService.getPatient(this.activatedRoute.snapshot.url[1].path)
.subscribe(
patient => {
this.id = this.activatedRoute.snapshot.url[1].path;
this.patient = patient;
this.initForm();
},
error => this.errorMessage = <any>error);
}
onSubmit(form){
console.log(this.patientForm);
// Post the API
};
initForm() {
let patientFirstName = '';
if (this.editMode) {
console.log(this.patient.firstName);
console.log(this.patient.lastName);
console.log(this.patient.participantUuid);
patientFirstName = this.patient.firstName;
}
this.patientForm = new FormGroup({
'firstName': new FormControl(patientFirstName)
})
};
}
Любая помощь/указание на меня в правильном направлении было бы здорово! Спасибо!
Ответы
Ответ 1
Ваша patientForm
не undefined
пока patient
в подписке не будет заполнен. Таким образом, вы пытаетесь привязать значение, которое не существует в шаблоне во время анализа шаблона.
Добавьте *ngIf
чтобы визуализировать форму, только если пациент правдив, или создается группа форм:
<section class="CreatePatient">
<form *ngIf="patient" [formGroup]="patientForm" (ngSubmit)="onSubmit()">
<div class="row">
<div class="form-group col-12 col-lg-3">
<label for="firstName">First Name</label>
<input formControlName="firstName" type="text" class="form-control" id="firstName" >
</div>
<div class="row">
<div class="col-12 col-lg-2">
<button type="submit" name="submit" class="btn btn-block btn-primary">Save</button>
</div>
</div>
</form>
</section>
Когда пациент будет заполнен в подписке, экземпляр patientForm
будет существовать, и привязка будет работать. Это распространенная "ошибка" при работе с асинхронными значениями.
Формы не всегда имеют начальные значения, поэтому вы также можете проверить существование самой формы:
<form *ngIf="patientForm" [formGroup]="patientForm" (ngSubmit)="onSubmit()">
Важной частью является то, что форма не отображается до момента ее создания.
Ответ 2
Проблема в том, что ваша форма в начале равна нулю.
И только на ng init вы получите пациента, а затем создадите его. Вы должны инициализировать свою форму в начале или
<section class="CreatePatient" *ngIf="patientForm">