Ответ 1
Начиная с версии 5.0.0, угловой материал теперь поддерживает ngModel
для списка выбора.
Таким образом, код может быть упрощен до
<mat-selection-list #list [(ngModel)]="selectedOptions" (ngModelChange)="onNgModelChange($event)">
<mat-list-option *ngFor="let tta of taskTypeAreas" [value]="tta.name">
{{tta.name}}
</mat-list-option>
</mat-selection-list>
Релиз также предоставляет событие ngModelChange
для списка выбора. Вот обновленный стек блиц
(Оригинальный ответ до Angular 5.0.0)
Похоже, что mat-selection-list в настоящее время не поддерживает ngModel (https://github.com/angular/material2/pull/7456), но похоже, что он будет поддерживаться в ближайшем будущем. В то же время вы можете использовать ссылочную переменную #list
чтобы получить выбранные параметры.
// component.html
<mat-selection-list #list>
<mat-list-option *ngFor="let tta of taskTypeAreas" [selected]="tta.selected"
(click)="onAreaListControlChanged(list)" [value]="tta.name">
{{tta.name}}
</mat-list-option>
</mat-selection-list>
Затем передайте ссылочную переменную в свой onAreaListControlChanged(list)
чтобы вы могли проанализировать выбранные параметры.
// component.ts
onAreaListControlChanged(list){
this.selectedOptions = list.selectedOptions.selected.map(item => item.value);
}
Чтобы установить флажки при загрузке, вы можете использовать свойство [selected]
каждого <mat-list-option>
.
<mat-list-option ... [selected]="tta.selected" ...>
Для этого вам нужно добавить еще одно свойство в ваш массив.
// component.ts
taskTypeAreas: {
name: string;
selected: boolean;
}[] = [
{
name: 'Area 1',
selected: false
},
{
name: 'Area 2',
selected: false
},
{
name: 'Area 3',
selected: true
},
];
Это сделает Area 3
выбранной при загрузке. Вот стеблиц, демонстрирующий это.