angular - 使用来自服务器的数组初始化表单控件不起作用
问题描述
我的要求是遍历来自服务器的数据并创建一个表单组的复选框。我的示例 html 代码是
<div *ngFor="let rel of formGroup.controls['releases'].controls;let i = index" style="display:inline-block">
<clr-checkbox [formControl]="rel"
[clrInline]="true">
{{releases[i].item_text}}
</clr-checkbox>
</div>
在组件 ngOnInit 中,我从服务器获取数据并分配给 formGroup。在 ngOnInit 中,我将 formGroup 定义为
this.formGroup=this.formBuilder.group({
releases:this.formBuilder.array(this.releases)
})
this._releaseHandler.getVersionsFromBackend().subscribe((x:Array<any>)=>{
x.forEach((value,index)=>{
this.releases.push({id:index,item_text:value.Release_Name})
})
this.buildFormGroup()
}),error=>{console.log(error),()=>{
console.log("Called")
}}
获取数据后,我在 buildFormGroup 中创建了formGroup
buildFormGroup(){
this.formGroup.controls['releases'].setValue(this.formBuilder.array(this.releases)
}
来自getVersionsFromBackend的服务的数据
getVersionsFromBackend(){
return this._http.get(this._backendUrl+"/getReleaseDetails").pipe(shareReplay(1))
}
但是每次 formControl 都没有获得任何价值。这很可能是因为那时它的表单已经执行了来自服务器的数据。
解决方案
我建议,如果您没有任何重要的依赖项,请使用称为Resolver的 Angular 技术:
- 参考
- 该技术用于在加载组件之前加载数据,更加优雅和清晰
推荐阅读
- asp.net-core - 将缓存添加到 ASP.NET Core 响应
- python - 如何为python中数据框中的特定列创建掩码?
- api - SAP SuccessFactors oData API。未找到 FO 部门实体
- tableau-api - 如何查找 HiveServer2 的连接详细信息以进行 Tableau 可视化
- arrays - postgresql中的对象数组
- angular - Angular PrimeIcons 在本地工作,但不在 IIS 上
- python - 如何使用 pandas.read_csv 读取字段
- c# - 使用 Firebase 存储脱机时如何捕获和处理 GetBytesAsync 错误?
- node.js - 从 iOS 应用程序调用时,Firebase 函数返回空值
- rust - 为什么要定义具有匿名生命周期的格式化程序?