Сортировка по умолчанию в угловом материале - сортировка заголовка
Как я могу изменить код углового материала ниже, так что таблица данных сортируется по столбцу "имя" по возрастанию по умолчанию. Должна отображаться стрелка (указывающая направление текущей сортировки).
Этого я хочу достичь:
Исходный код:
<table matSort (matSortChange)="sortData($event)">
<tr>
<th mat-sort-header="name">Dessert (100g)</th>
<th mat-sort-header="calories">Calories</th>
<th mat-sort-header="fat">Fat (g)</th>
<th mat-sort-header="carbs">Carbs (g)</th>
<th mat-sort-header="protein">Protein (g)</th>
</tr>
<tr *ngFor="let dessert of sortedData">
<td>{{dessert.name}}</td>
<td>{{dessert.calories}}</td>
<td>{{dessert.fat}}</td>
<td>{{dessert.carbs}}</td>
<td>{{dessert.protein}}</td>
</tr>
</table>
Я пытался что-то вроде этого, но он не работает (стрелка не отображается, не сортируется)
<table matSort (matSortChange)="sortData($event)" matSortActive="name" matSortStart="asc" matSortDisableClear>
Здесь ссылки на Plunker
Ответы
Ответ 1
Вы matSortStart
для matSortDirection
.
Попробуй это:
<table matSort (matSortChange)="sortData($event)" matSortActive="name" matSortDirection="asc" matSortDisableClear>
https://plnkr.co/edit/sg0hC5d8LTjLKhbH9Eug?p=preview
matSortStart
можно использовать для изменения цикла, используемого при сортировке (например, когда пользователь нажимает для сортировки, он начинается с desc вместо asc).
Ответ 2
Вы можете программно отсортировать таблицу, вызвав метод sort(Sortable)
источника данных. Предполагая, что у вас есть dataSource
компонента dataSource
для источника данных:
// to put next to the class fields of the component
@ViewChild(MatSort) sort: MatSort
// to put where you want the sort to be programmatically triggered, for example inside ngOnInit
this.sort.sort(({ id: 'name', start: 'asc'}) as MatSortable);
this.dataSource.sort = this.sort;
Ответ 3
@ViewChild(MatSort) sort: MatSort;
this.dataSource.sort = this.sort;
const sortState: Sort = {active: 'name', direction: 'desc'};
this.sort.active = sortState.active;
this.sort.direction = sortState.direction;
this.sort.sortChange.emit(sortState);
должно сработать. демонстрация
И чтобы показать стрелку направления сортировки, добавьте следующий CSS (обходной путь)
th.mat-header-cell .mat-sort-header-container.mat-sort-header-sorted .mat-sort-header-arrow {
opacity: 1 !important;
transform: translateY(0) !important;
}
Ответ 4
Возможно, вы пытались вызвать начальную страницу функции сортировки, которая была вызвана по имени и направлению?
ngOnInit() {
let defSort: Sort = {};
defSort.direction = 'asc';
defSort.active = 'name';
this.sortData(defSort);
}
Ответ 5
Обновление для материала (протестировано с v7.3):
@ViewChild(MatSort) matSort: MatSort;
private someMethod(): void {
this.matSort.sort({ id: 'columnName', start: 'asc', disableClear: false });
}
Это также обновит стрелку mat-sort-header
без какого-либо обходного пути