获取 MatSelectionList 的多个列表的选定选项 - Angular 6
Get Selected Option Of Multiple List of MatSelectionList - Angular 6
我正在为此寻找解决方案:
我有这个
result = [
{
"roomsFloor": {
"floor": {
"floorName": "piso 1",
"room": [{
"roomNumber": "103"
}]
}
}
},
{
"roomsFloor": {
"floor": {
"floorName": "piso 2",
"room":
[
{
"roomNumber": "104"
},
{
"roomNumber": "105"
}
]
}
}
},
]
我使用 Angular Material 6 和 MatExpanssionPanel、MatAcrodion、MatSelectionList 来表示此数据,但我需要为每个 Accordionselected 选项获取一个数组
我试试这个
<mat-accordion>
<mat-expansion-panel *ngFor="let item of result" hideToggle = "false">
<mat-expansion-panel-header>
<mat-panel-title style="color: #44474B">
<strong><p>{{item.roomsFloor.floor.floorName}}</p></strong>
</mat-panel-title>
<mat-panel-description>
</mat-panel-description>
</mat-expansion-panel-header>
<ng-template matExpansionPanelContent>
<mat-selection-list #items (selectionChange)="handleSelection(items.selectedOptions)">
<mat-list-option *ngFor="let roomDetail of item.roomsFloor.floor.room" [value]="roomDetail">
<mat-icon mat-list-icon>meeting_room</mat-icon>
<h4 mat-line>No. {{roomDetail.roomNumber}}</h4>
</mat-list-option>
</mat-selection-list>
</ng-template>
</mat-expansion-panel>
</mat-accordion>
.TS组件
handleSelection(itemRoomSelected) {
this.selectedRooms = itemRoomSelected.selected.map(item => item.value);
console.log('selected room', this.selectedRooms);
}
此方法显示手风琴部分的 selected 项目已打开,但当打开手风琴的其他项目和 selection 列表中的 select 其他项目时,数组是使用当前手风琴部分的新值重置。
有什么解决办法,谢谢
您可以使用模板驱动表单来解决这个问题。
将您的 html 包装在表单标签中,并定义您需要的任何表单名称的模板引用...在本示例中,我只使用了 myForm
,但它可以是您需要的任何名称。
<form #myForm="ngForm">
当使用模板驱动的表单时,您需要为 mat-selection-list
分配一个名称,以便它可以创建一个 FormControl 来存储值...在这个例子中,我将您的 floorName
作为最有意义...
请注意: 名称 [] 周围的方括号用于 属性 绑定...这很重要。
[name]="item.roomsFloor.floor.floorName"
然后将表单值传递给选择更改时的方法。
(selectionChange)="handleSelection(myForm.value)"
这将导致来自两个手风琴的值数组,并将 floorName 作为父键传递给您的方法。
piso 1: Array(1)
0: {roomNumber: "103"}
piso 2: Array(2)
0: {roomNumber: "104"}
1: {roomNumber: "105"}
HTML
<form #myForm="ngForm">
<mat-accordion>
<mat-expansion-panel *ngFor="let item of result" hideToggle = "false">
<mat-expansion-panel-header>
<mat-panel-title style="color: #44474B">
<strong><p>{{item.roomsFloor.floor.floorName}}</p></strong>
</mat-panel-title>
<mat-panel-description>
</mat-panel-description>
</mat-expansion-panel-header>
<ng-template matExpansionPanelContent>
<mat-selection-list #items (selectionChange)="handleSelection(myForm.value)" [name]="item.roomsFloor.floor.floorName" ngModel>
<mat-list-option *ngFor="let roomDetail of item.roomsFloor.floor.room" [value]="roomDetail">
<mat-icon mat-list-icon>meeting_room</mat-icon>
<h4 mat-line>No. {{roomDetail.roomNumber}}</h4>
</mat-list-option>
</mat-selection-list>
</ng-template>
</mat-expansion-panel>
</mat-accordion>
</form>
我正在为此寻找解决方案: 我有这个
result = [
{
"roomsFloor": {
"floor": {
"floorName": "piso 1",
"room": [{
"roomNumber": "103"
}]
}
}
},
{
"roomsFloor": {
"floor": {
"floorName": "piso 2",
"room":
[
{
"roomNumber": "104"
},
{
"roomNumber": "105"
}
]
}
}
},
]
我使用 Angular Material 6 和 MatExpanssionPanel、MatAcrodion、MatSelectionList 来表示此数据,但我需要为每个 Accordionselected 选项获取一个数组
我试试这个
<mat-accordion>
<mat-expansion-panel *ngFor="let item of result" hideToggle = "false">
<mat-expansion-panel-header>
<mat-panel-title style="color: #44474B">
<strong><p>{{item.roomsFloor.floor.floorName}}</p></strong>
</mat-panel-title>
<mat-panel-description>
</mat-panel-description>
</mat-expansion-panel-header>
<ng-template matExpansionPanelContent>
<mat-selection-list #items (selectionChange)="handleSelection(items.selectedOptions)">
<mat-list-option *ngFor="let roomDetail of item.roomsFloor.floor.room" [value]="roomDetail">
<mat-icon mat-list-icon>meeting_room</mat-icon>
<h4 mat-line>No. {{roomDetail.roomNumber}}</h4>
</mat-list-option>
</mat-selection-list>
</ng-template>
</mat-expansion-panel>
</mat-accordion>
.TS组件
handleSelection(itemRoomSelected) {
this.selectedRooms = itemRoomSelected.selected.map(item => item.value);
console.log('selected room', this.selectedRooms);
}
此方法显示手风琴部分的 selected 项目已打开,但当打开手风琴的其他项目和 selection 列表中的 select 其他项目时,数组是使用当前手风琴部分的新值重置。
有什么解决办法,谢谢
您可以使用模板驱动表单来解决这个问题。
将您的 html 包装在表单标签中,并定义您需要的任何表单名称的模板引用...在本示例中,我只使用了 myForm
,但它可以是您需要的任何名称。
<form #myForm="ngForm">
当使用模板驱动的表单时,您需要为 mat-selection-list
分配一个名称,以便它可以创建一个 FormControl 来存储值...在这个例子中,我将您的 floorName
作为最有意义...
请注意: 名称 [] 周围的方括号用于 属性 绑定...这很重要。
[name]="item.roomsFloor.floor.floorName"
然后将表单值传递给选择更改时的方法。
(selectionChange)="handleSelection(myForm.value)"
这将导致来自两个手风琴的值数组,并将 floorName 作为父键传递给您的方法。
piso 1: Array(1)
0: {roomNumber: "103"}
piso 2: Array(2)
0: {roomNumber: "104"}
1: {roomNumber: "105"}
HTML
<form #myForm="ngForm">
<mat-accordion>
<mat-expansion-panel *ngFor="let item of result" hideToggle = "false">
<mat-expansion-panel-header>
<mat-panel-title style="color: #44474B">
<strong><p>{{item.roomsFloor.floor.floorName}}</p></strong>
</mat-panel-title>
<mat-panel-description>
</mat-panel-description>
</mat-expansion-panel-header>
<ng-template matExpansionPanelContent>
<mat-selection-list #items (selectionChange)="handleSelection(myForm.value)" [name]="item.roomsFloor.floor.floorName" ngModel>
<mat-list-option *ngFor="let roomDetail of item.roomsFloor.floor.room" [value]="roomDetail">
<mat-icon mat-list-icon>meeting_room</mat-icon>
<h4 mat-line>No. {{roomDetail.roomNumber}}</h4>
</mat-list-option>
</mat-selection-list>
</ng-template>
</mat-expansion-panel>
</mat-accordion>
</form>