您需要执行以下操作:
- 从
<mat-select> 中删除不必要的[(ngModel)](你有两个)和[compareWith]:
<mat-select placeholder="State2" multiple [(ngModel)]="modelGroup" #itemSelect="ngModel">...</mat-select>
- 您可以创建一个名为
groups 的单个数组,而不是使用正则表达式为每个选项组创建一个数组,如下所示:
groups: any[] = [
{
name: 'ETHERNET',
items: [
{
label: "640K",
value: "BS640KB_ETHERNET",
defaultValue: true
},
{
label: "7MB",
value: "BS7MB_ETHERNET",
defaultValue: true
},
{
label: "7MB NOQinQ",
value: "BS7MB_ETHERNET_NOQinQ",
defaultValue: true
},
{
label: "20MB",
value: "BS20MB_ETHERNET",
defaultValue: true
}
]
},
{
name: 'ATM',
items: [
{
label: "640K",
value: "BS640K_ATM",
defaultValue: true
},
{
label: "7MB",
value: "BS7M_ATM",
defaultValue: true
},
{
label: "20MB",
value: "BS20M_ATM",
defaultValue: true
}
]
},
{
name: 'ETH',
items: [
{
label: "2MB",
value: "BS2MB_SHDSL_ETH",
defaultValue: true
},
{
label: "4MB IMA",
value: "BS4MB_SHDSL_ETH_IMA",
defaultValue: true
},
{
label: "6MB IMA",
value: "BS6MB_SHDSL_ETH_IMA",
defaultValue: true
},
{
label: "8MB IMA",
value: "BS8MB_SHDSL_ETH_IMA",
defaultValue: true
}
]
},
{
name: 'SHDSL ATM',
items: [
{
label: "2MB",
value: "BS2MB_SHDSL",
defaultValue: true
},
{
label: "4MB B",
value: "BS4MB_SHDSL_B",
defaultValue: true
},
{
label: "4MB IMA",
value: "BS4MB_SHDSL_IMA",
defaultValue: true
},
{
label: "6MB IMA",
value: "BS6MB_SHDSL_IMA",
defaultValue: true
},
{
label: "8MB IMA",
value: "BS8MB_SHDSL_IMA",
defaultValue: true
}
]
}
];
此外,您还可以删除所有其他数组、正则表达式、createCatArray() 和 equals() 方法。
- 现在我们可以清理模板了。继续并删除所有现有的
<mat-optgroup>。现在添加一个 <mat-optgroup> 循环通过您设置的数组 groups 并呈现相应的项目,如下所示:
<mat-optgroup *ngFor="let group of groups" [label]="group.name">
<mat-option *ngFor="let item of group.items" [value]="item.value">
{{item.label}}
</mat-option>
</mat-optgroup>
- 现在删除您在“全选”按钮上设置的参数:
<button mat-button (click)="selectAll(itemSelect)">Seleziona Tutti</button>
- 现在最后一步是更改
selectAll() 方法。在方法中删除参数数组和现有的 for 循环。现在我们将遍历设置的组数组并将每个组中每个项目的值添加到值数组中。稍后将提交此数组以更新所选值。该方法应如下所示:
selectAll(select: NgModel) {
let values: any[] = [];
for(let group of this.groups){
for(let item of group.items){
values.push(item.value);
}
}
select.update.emit(values);
}
基本上我们做了以下事情:
创建了一个组数组,其中还包含组的名称和属于该组的项目。
循环遍历组数组以在 html 模板中呈现组及其对应项。
添加了一个全选方法,该方法循环遍历所有组项并将它们的值添加到稍后将提交以更新选择的数组中。
这是正常运行的应用程序:
https://stackblitz.com/edit/angular5-selectall-with-groups-knptuu