Начните с добавления value
для строк или ngValue
для объектов к вашим параметрам.
<mat-list-option *ngFor="let pizza of pizzas" [value]="pizza"> or [ngValue]="pizza"
1. Используйте selectionChange
Передайте массив выбранных MatListOptions в вашу функцию.
<mat-selection-list #pizzaList (selectionChange)="onGroupsChange(pizzaList.selectedOptions.selected)">
<mat-list-option *ngFor="let pizza of pizzas" [value]="pizza">
{{pizza}}
</mat-list-option>
</mat-selection-list>
Вы получите массив, содержащий выбранные параметры в порядке их выбора.
import { MatListOption } from '@angular/material'
onGroupsChange(options: MatListOption[]) {
// map these MatListOptions to their values
console.log(options.map(o => o.value));
}
2. Используйте ngModel
Как прокомментировал @Eliseo, вы можете использовать ngModel
для двухсторонней привязки данных, если вам нужен только доступ к выбранным данным, но вам не нужно уведомлять об изменениях.
<mat-selection-list #pizzaList [(ngModel)]="selectedPizzas">
<mat-list-option *ngFor="let pizza of pizzas" [value]="pizza">
{{pizza}}
</mat-list-option>
</mat-selection-list>
selectedPizzas: string[]; // this array will contain the selected pizzas
Чтобы дополнительно получать уведомления об изменениях, вы можете добавить ngModelChange
:
<mat-selection-list #pizzaList [(ngModel)]="selectedPizzas" (ngModelChange)="onGroupsChange($event)">
Вы получите массив, который содержит значения выбранных опций в порядке их появления во входном массиве pizzas
(не в том порядке, в котором они были выбраны с помощью selectionChange
).
onGroupsChange(selectedPizzas: string[]) {
console.log(selectedPizzas);
}