Default sorting in Angular Material - Sort header Default sorting in Angular Material - Sort header angular angular

Default sorting in Angular Material - Sort header


You're mistaking matSortStart for matSortDirection.

Try this:

<table matSort (matSortChange)="sortData($event)" matSortActive="name" matSortDirection="asc" matSortDisableClear>

https://stackblitz.com/edit/angular-defaultsort?file=src/app/sort-overview-example.html

matSortStart can be used to reverse the cycle used when sort (e.g. when the user clicks to sort, it starts at desc instead of asc).

Edit: Thanks Ben for providing an updated example


You can programmatically sort the table by invoking the sort(Sortable) method of the data source. Assuming you've got a dataSource component property for the data source:

// 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 ngOnInitthis.sort.sort(({ id: 'name', start: 'asc'}) as MatSortable);this.dataSource.sort = this.sort;


@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);

should work. demo

And to show sorting direction arrow, add next css (workaround)

th.mat-header-cell .mat-sort-header-container.mat-sort-header-sorted .mat-sort-header-arrow {    opacity: 1 !important;    transform: translateY(0) !important;}