Я использую FormArray в реактивной форме angular, и все работает нормально, пока я не попытаюсь выполнить операцию patchValue ().
Здесь я пытаюсь отредактировать projectForm. В форму вы можете добавить нескольких разработчиков из <select> <option> </option> </select>
. Значение в поле параметра взято из базы данных, и пользователь может добавить любое количество разработчиков по своему усмотрению.
Версия проблемы с упрощенным кодом выглядит следующим образом: project.component.ts
projectForm: FormGroup
constructor(private fb: FormBuilder, private projectService: ProjectService, private developerService: DeveloperService){ }
ngOnInit() {
this.developerService.getDeveloper().subscribe((data) => {
this.developers = data;
}, (error) => {
console.log(error)
}
});
this.projectForm = this.fb.group({
project_name: [''],
devs: this.fb.array([this.buildDevs()]),
})
this.editProject();
}
buildDevs(): FormGroup {
return this.fb.group({
developer: ['', Validators.required]
});
}
displayProject(id: number) {
this.projectService.getProjectDetail(id).subscribe(
(project) => this.editProject(project),
(error) => console.log(error)
)
}
editProject(project){
this.projectForm.patchValue({
project_name: project.project_name,
});
this.projectForm.setControl('devs', this.fb.array(project.developer || []));
}
ProjectService
отвечает правильным ответом по проекту. В этом нет ничего плохого.
Добавить и обновить сообщения нужно делать в одной и той же форме, и добавление формы работает нормально. `project.component.html '
<form [formGroup]="projectForm">
<label>Name: </label>
<input type="text" formControlName="project_name">
<label> Developers: </label>
<div formArrayName="devs">
<div *ngFor="let d of projectForm.controls.devs.controls; let i = index" [formGroupName]="i">
<select formControlName="developer" *ngIf="developers">
<option *ngFor="let dev of developers" value="{{ dev.id }}">{{ dev.user.username }}
</option>
</select>
</div>
</div>
</form>
Following error in the console is present in the response whenever I visit the project edit route
Номер поля параметра точно соответствует количеству разработчиков, связанных с проектом, которые нужно отредактировать, но имя пользователя разработчика не отображается в вариант. ERROR Error: Cannot find control with path: 'devs -> 0 -> developer'
ERROR Error: Cannot find control with path: 'devs -> 1 -> developer'
so on ... as the number of developer ...
Мы будем благодарны за любую помощь, так как я новичок в angular и перепробовал все возможные варианты, которые я могу сделать. Спасибо.