angular - 选择后更新默认值
问题描述
我正在尝试实现下图中显示的内容:
- 如果用户在事件 1 中选择了一个选项,则必须将未选择的默认值从“SELECT”更新为“None”。当前发生的是它仍然是“SELECT”。
如何将其更新为“无”?我能够更新选定的类,但无法更新未选择的值。这几天一直在苦苦挣扎。
我的HTML:
<form (ngSubmit)="onSubmit()">
<div *ngFor="let event of groupSelections" class="row">
<div class="col-12">
<div class="row">
<div *ngFor="let team of event?.Actors; first as isFirst" class="col-6">
<div class="row">
<div *ngIf="isFirst" class="col-6">
<div>
{{ team?.ActorName }}
</div>
</div>
<div class="col-6">
<div [className]="isSelectedPlayer(team?.Players) ?'selected':''">
<select (change)="getSelections(event, actors)">
<option value="">SELECT</option>
<option value="" *ngFor="let player of team?.Players">
{{ player?.Name }}
</option>
</select>
</div>
</div>
<div *ngIf="!isFirst" class="col-6">
<div>
{{ team?.ActorName }}
</div>
</div>
</div>
</div>
</form>
我的数据:
groupSelections = [
{
"PromotionId": 5,
"Events": [
{
"Actors": [
{
"ActorId": 33,
"ActorName": "Italy",
"Players": [
{
"Name": " Mattia De Sciglio (D)",
"Position": "DEFENDER",
"Point": 5
},
{
"Name": "Bryan Cristante (M)",
"Position": "MIDFIELDER",
"Point": 3
}
]
},
{
"ActorId": 34,
"ActorName": "Turkey",
"Players": [
{
"Name": " Zeki Çelik (D)",
"Position": "DEFENDER",
"Point": 5
},
{
"Name": "Ozan Tufan (M)",
"Position": "MIDFIELDER",
"Point": 3
}
]
}
]
},
{
"Actors": [
{
"ActorId": 77,
"ActorName": "Slovakia",
"Players": [
{
"Name": "Mattia Perin (G)",
"Position": "GOALKEEPER",
"Point": 10
},
{
"Name": "Bryan Cristante (M)",
"Position": "MIDFIELDER",
"Point": 3
}
]
},
{
"ActorId": 78,
"ActorName": "Sweden",
"Players": [
{
"Name": " Zeki Çelik (D)",
"Position": "DEFENDER",
"Point": 5
},
{
"Name": "Ozan Tufan (M)",
"Position": "MIDFIELDER",
"Point": 3
}
]
}
]
}
]
}
我的 Ts 文件:
selectedPlayers: Array<string> = [];
// check whether the players object is in the list
isSelectedPlayer(players: any): boolean {
return this.selectedPlayers.findIndex(element => element === players) > -1;
}
getSelections(event, actors): any {
const selections = [];
this.selectedTeam = actors;
this.selectedTeamPlayers = actors.Players;
this.gameEvent = event;
// add the selection to your list, if is not in it
if (this.selectedPlayers.findIndex(element => element === player) === -1) {
this.selectedPlayers.push(player);
}
selections.push({
EventId: this.gameEvent.EventId,
ActorId: this.selectedTeam.ActorId,
PlayerPosition: this.player.Position,
PlayerPoint: this.player.Point,
});
this.playerSelections = selections;
}
解决方案
在您的数据接口中添加一个新属性到 ActorId,ActorName ,可能是selected: boolean
所以您的数据如下所示,
"Actors": [
{
"ActorId": 33,
"ActorName": "Italy",
"selected": true, // if Italy is selected
//..... other fields...
}
]
因此,当单击 getSelections() 方法中的选项时,根据 ActorId 更新选定的布尔值。
在 HTML 中,不是 this ,而是根据循环<option value="">SELECT</option>
中的布尔值执行逻辑以获取 SELECT 或 None 值。selected
编辑 1
HTML
<option *ngIf="!team.selected && touched" value="">NONE</option>
<option *ngIf="!touched" value="">SELECT</option>
TS
来电reBuildData(event)
_getSelections(event, actors)
reBuildData(event) {
this.touched = true;
this.groupSelections[0].Events.forEach(event1 => {
event1.Actors.forEach(actors1 => {
if (actors1.ActorId == event.ActorId) {
actors1.selected = true;
} else {
actors1.selected = false;
}
});
});
console.log(this.groupSelections[0]); // check the selected value for all actors.
}
声明此属性touched = false;
根据您的需要更改此逻辑。