【发布时间】:2022-11-22 16:26:48
【问题描述】:
我有一个玩家列表,在选择玩家名称时,我通过引入一个布尔标志来显示各个玩家的详细信息(isPlayerSelected) 在每个 formGroup 中。这种方法的一个缺点是页面响应很慢(当项目数量较多时),因为它必须使用 patchValue 更新每个 formGroup 中的布尔标志。有没有更好的方法来代替引入布尔标志?
请帮忙 。我也附上了StackBlitz链接
selectPlayer(player: any) {
player.isPlayerSelected = !player.isPlayerSelected;
const selectedPlayer = this.playerDetailsControls.find(
(item) => player?.id === item.get('id')?.value
);
const otherPlayers = this.playerDetailsControls.filter(
(item) => player.id !== item.get('id')?.value
);
selectedPlayer?.patchValue({
isPlayerSelected: true,
});
otherPlayers.map((item) => {
item?.patchValue({
isPlayerSelected: false,
});
});
}
HTML
<form [formGroup]="form">
<div formArrayName="playerDetails">
<div *ngFor="let control of playerDetailsControls; let i = index">
<div [formGroupName]="i">
<div *ngIf="control.get('isPlayerSelected')?.value">
Player Name : <input formControlName="playerName" /><br /><br />
Role: <input formControlName="role" /><br /><br />
Country: <input formControlName="country" /><br /><br />
<hr />
</div>
</div>
</div>
</div>
</form>
【问题讨论】:
标签: javascript angular typescript angular-reactive-forms formarray