Comprehensive Guide to Default Sorting in Angular Material Tables: Proper Usage of matSortActive and matSortDirection

Dec 01, 2025 · Programming · 13 views · 7.8

Keywords: Angular Material | Default Sorting | matSortActive

Abstract: This article provides an in-depth exploration of two methods for setting default sorting in Angular Material data tables. It first details the correct configuration using template directives matSortActive and matSortDirection, including how to display sorting arrow indicators. Then it introduces an alternative approach using the sort() method of the MatSort component programmatically. By comparing the implementation principles and applicable scenarios of both methods, the article helps developers understand core concepts of Angular Material sorting mechanisms and avoid common configuration errors.

Overview of Angular Material Sorting Mechanism

Angular Material provides powerful data table sorting functionality through the matSort directive and related configuration properties. However, in practical development, setting initial default sorting states for tables often leads to configuration errors where sorting doesn't work or sorting arrows don't display properly.

Correct Configuration for Template-Driven Default Sorting

According to the best practice answer, setting default sorting requires proper use of two key properties: matSortActive and matSortDirection. Here's a complete example configuration:

<table matSort 
      (matSortChange)="sortData($event)"
      matSortActive="name"
      matSortDirection="asc"
      matSortDisableClear>
  <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>

In this configuration:

Analysis of Common Errors

Developers often confuse the purposes of matSortStart and matSortDirection:

For example, setting matSortStart="desc" means that when users first click an unsorted column, it starts with descending order instead of the default ascending.

Programmatic Default Sorting Method

As a supplementary approach, default sorting can be set programmatically within components. This method offers greater flexibility for dynamic data or complex business logic scenarios:

import { Component, ViewChild, OnInit } from '@angular/core';
import { MatSort, MatSortable } from '@angular/material/sort';

@Component({
  selector: 'app-example',
  templateUrl: './example.component.html'
})
export class ExampleComponent implements OnInit {
  @ViewChild(MatSort) sort: MatSort;
  
  ngOnInit() {
    // Set default sorting
    this.sort.sort({ id: 'name', start: 'asc' } as MatSortable);
    this.dataSource.sort = this.sort;
  }
}

Sorting Arrow Display Mechanism

The display of sorting arrows depends on correct sorting state configuration. When matSortActive and matSortDirection are properly set:

  1. Angular Material automatically adds sorting arrow icons to the specified column headers
  2. Arrow direction reflects the current sorting direction (up for ascending, down for descending)
  3. Arrows automatically update when sorting state changes

Best Practice Recommendations

Based on comparative analysis of both methods:

  1. For static table configurations, template-driven approach is recommended for cleaner code
  2. For dynamic data or scenarios requiring runtime sorting logic changes, programmatic method is more suitable
  3. Always ensure data source is properly bound to the sorting component
  4. Test arrow display states under different sorting directions

Conclusion

Properly configuring default sorting for Angular Material tables requires understanding the core roles of matSortActive and matSortDirection. The template-driven approach achieves concise default sorting through declarative configuration, while the programmatic method offers greater flexibility. Developers should choose the appropriate method based on specific requirements and avoid common property confusion errors.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.