вы можете сделать что-то вроде этого.
вот как работает флажок.
<ng-container matColumnDef="select">
<th mat-header-cell *matHeaderCellDef>
<mat-checkbox (change)="$event ? masterToggle() : null" [checked]="selection.hasValue() && isAllSelected()"
[indeterminate]="selection.hasValue() && !isAllSelected()" [aria-label]="checkboxLabel()">
</mat-checkbox>
<div mat-sort-header>
<mat-icon>ac_unit</mat-icon>
</div>
</th>
<td mat-cell *matCellDef="let row">
<mat-checkbox (click)="$event.stopPropagation()" (change)="$event ? selection.toggle(row) : null"
[checked]="selection.isSelected(row)" [aria-label]="checkboxLabel(row)">
</mat-checkbox>
</td>
</ng-container>
и в машинописном тексте, который вы пишете.
this.dataSource.sortingDataAccessor = (item, property) => {
switch (property) {
case 'select': return this.selection.selected.includes(item);
case 'nestedObject': return item.parentObject.childObject;
default: return item[property];
}
};
в основном, так как мой matColumnDef является 'select', когда данные передаются вsortingDataAccessor вам нужно проверить, соответствует ли он 'select'.как только вы знаете, что это соответствует «select», вы можете проверить, включен ли ваш элемент (имеется в виду текущая строка) в массив выбранных элементов (selection.selected array).
selection = new SelectionModel(true, []); // you already should have this since you have select.
Я также включил сортировку во вложенных объектах.Если вам это нужно.если у вас есть вложенный объект, вам нужно написать что-то вроде case 'nestedObject' в switchcase.'nestedObject' - это то, что вы называете своим столбцом в таблице.
Я проверил его в своем проекте, и он отлично работает.
Удачи!