Как использовать mat-list-option в mat-selection-list косвенно в angular material?

#angular #angular-material

#angular #angular-material

Вопрос:

Я сгруппировал список полномочий, чтобы улучшить ux, используя mat-expansion-panel для каждой группы, чтобы сделать группы сворачиваемыми. Но при установке флажка некоторые параметры mat-selection-list не меняются. Это html-файл:

 <mat-selection-list *ngIf="!formProperty.root.schema.readOnly" #list [(ngModel)]="selectedAuthority"
                                        (selectionChange)="selectionChange($event)">
    <div *ngFor="let key of objectKey(groupedAuthorities())">
        <mat-expansion-panel>
            <mat-expansion-panel-header>
                <mat-panel-title matSubheader>
                    <h3 translate>app.{{key}}.home.title</h3>
                </mat-panel-title>
            </mat-expansion-panel-header>
            <mat-list-option [value]="authority" *ngFor="let authority of groupedAuthorities()[key] ; let i = index;">
                <p AuthorityTranslate>
            {{authority.name}}
                </p>
            </mat-list-option>
        </mat-expansion-panel>
    </div>
</mat-selection-list>
  

Когда я нажимаю на флажок, вызывается SelectionChange ($ event), но selectedAuthority — это пустой список. Хотя, если mat-list-option находится сразу после mat-selection-list, selectedAuthority содержит отмеченные параметры.
Это функция SelectionChange в файле .ts

 public selectionChange(authorities: IAuthority[]): void {

    this.formProperty.setValue(authorities, false);
}
  

Ответ №1:

Здесь вы вводите событие приведения типа MatSelectionListChange к IAuthority[].

 (selectionChange)="selectionChange($event.source.selectedOptions)"
  

Это вернет selectionModel , вам все равно придется преобразовать его в IAuthority[].

Для справки: https://material.angular.io/components/list/api#MatSelectionList