【发布时间】:2020-11-23 04:08:43
【问题描述】:
我有一个从服务器获取的 lkBoardTypeList 列表的动态数组。我想在初始化时推送该数组以形成数组,基本上我想根据数组中的板名或 id 显示复选框。我知道如何以反应形式推送一个空数组。但是如何使用现有数组进行初始化。实际上它是一个更新/编辑组件
export class BoardTypeList{
id number;
descr string;
}
组件:
lkBoardTypeList: LkBoardType[] = [];
SelectedLkBoardTypeList: LkBoardType[] = [];
this.boardDashboardForm = this.formBuilder.group({
id: new FormControl(this.boardObj.id, Validators.required),
location: new FormControl(this.boardObj.location),
boardType: new FormArray([])
});
this.addCheckBoxes();
..//..//
addCheckBoxes(){
this.lkBoardTypeList.forEach(() => this.boardTypeFormArray.push(new FormControl(false)));
}
get boardTypeFormArray(){
return this.boardDashboardForm.controls.boardType as FormArray;
}
loadSelected(event){
this.boardService.getBoardTypeById(event.value).subscribe( posts =>{
this.data = posts;
console.log('getBoardTypeById',this.data);
},
error => {
console.log('getBoardTypeById - error',error);
this._errorService.handleError(error);
},
() => {
this.SelectedLkBoardTypeList = this.data.boardTypes;
for (let i = 0; i < this.lkBoardTypeList.length; i++) {
..///.. what code goes here
}
});
}
在 HTML 中
<div class="row">
<div class="col-sm-2">
<p-dropdown [options]="boardArray" formControlName="id" (onChange)="loadSelected($event)" placeholder=" Select "></p-dropdown>
</div>
</div>
<div class="form-group" >
<div formArrayName="boardType" *ngFor="let c of boardTypeFormArray.controls; let i = index">
<input class="col-sm-1" type="checkbox" [formGroupName]="i"/>
<span class="col-sm-5" >{{lkBoardTypeList[i].descr}}</span>
</div>
</div>
现在,当我检查元素时,我看到 formArrayName="boardType" 和复选框元素如下:
<input class="col-sm-1 ng-untouched ng-pristine ng-valid" type="checkbox" ng-reflect-name="0">
<input class="col-sm-1 ng-untouched ng-pristine ng-valid" type="checkbox" ng-reflect-name="1">
<input class="col-sm-1 ng-untouched ng-pristine ng-valid" type="checkbox" ng-reflect-name="2">
我猜 ng-reflect-name="0" 只不过是 'i' 的值。什么试图从 lkBoardTypeList 中设置 id 为 10、20、30 的数组的值。
另外请告诉我如何设置复选框中选中的值。 SelectedLkBoardTypeList - 例如,整个列表具有值 (10,20,30)。 selectedList 只包含 10 个,必须检查。
【问题讨论】:
-
这就是它的工作方式。最初加载页面时,应取消选中所有复选框。但我想要 ng-reflect-name="10", ng-reflect-name="20",ng-reflect-name="30" 映射来自 lkBoardTypeList 的 id。 Next 当页面中的下拉菜单发生变化时,我得到了 selectedLkBoardTypeList。现在我检查一下应该检查和取消检查的内容。
标签: javascript angular forms angular-reactive-forms angular2-forms