Угловой мат Выберите несколько вариантов выбора, в которых была изменена опция

У меня есть <mat select> с установленной опцией multiple (множественный выбор). Когда срабатывает событие selectionChange, мне нужно знать, какая опция была отмечена или не отмечена, однако она возвращает только новый текущий список выбранных опций.

Например, у меня есть список:

<mat-select (selectionChange)="change($event)" multiple placeholder="Select">
  <mat-option value="1">one</mat-option>
  <mat-option value="2">two</mat-option>
  <mat-option value="3">three</mat-option>
  <mat-option value="4">four</mat-option>
</mat-select>

Если опции one, three и four проверены, а затем опция пользователя не отмечена four, в обработчике событий мне нужно знать, какая опция вызвала событие (т.е. опция four) и его новое состояние. В настоящее время я не вижу способа получить доступ к этой информации в событии selectionChange.

https://stackblitz.com/edit/angular-1e9gsd?file=app/select-overview-example.ts

Я попытался поместить обработчик событий (selectionChange)="change($event)" на <mat-option>, но он не поддерживается.

Ответы

Ответ 1

Мне нужно было использовать onSelectionChange для <mat-option>, который отличается от selectionChange который вы можете использовать в <mat-select>

Было бы хорошо, если бы это было в документации для mat-select.

Здесь работает https://stackblitz.com/edit/angular-1e9gsd-34hrwg?file=app/select-overview-example.html.

Ответ 2

Это сработало для меня. blahs - это массив строк в этом случае. Используйте двухстороннее связывание:

<mat-select placeholder="choose..." [(value)]="selected" 
      (selectionChange)="somethingChanged(selected)">
  <mat-option *ngFor="let b of blahs; index as i;" value={{b[i]}}">{{b[i]}}
  </mat-option>
</mat-select>