【发布时间】:2023-11-01 04:38:01
【问题描述】:
我一直在以角度反应形式使用 FormArray,在我尝试执行 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 正在响应正确的项目响应。那里没有错。
Add 和 update 帖子需要以相同的形式完成,并且添加形式工作正常。
`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 的新手,并尝试了我能做的所有可能的选择。谢谢。
【问题讨论】:
-
在 HTML projectForm.controls.devs.controls 中替换为“devs.controls”。如果您为 stackblitz 提供此类查询,这将很有用。它将帮助其他开发人员快速发现问题并为您更快地解决问题。
标签: angular angular-reactive-forms angular8