Effective Methods to Show Empty Messages in Angular Material Data Tables

Dec 05, 2025 · Programming · 11 views · 7.8

Keywords: Angular | Material | Data Table | Empty Message | ngIf

Abstract: This article explores the best practices for displaying empty messages in Angular Material data tables, focusing on the use of *ngIf directives. It provides detailed code examples and analysis of alternative approaches to enhance user experience.

Introduction

In Angular applications using Material Design, data tables are a common component for displaying tabular data. However, when no data is available, it is essential to provide user feedback by showing an empty message such as "No records found." Based on the best answer from the provided Q&A data, this article delves into this requirement and offers a robust solution.

Solution Using *ngIf Directive

The most straightforward method to display an empty message in an Angular Material data table is by utilizing the *ngIf directive. This approach allows conditional rendering of the table and the message based on the data source's length. The following code implementation is adapted from the best answer and rewritten for clarity.

<mat-table #table [dataSource]="dataSource" matSort *ngIf="dataSource.length &gt; 0"> <ng-container matColumnDef="Name"> <mat-header-cell *matHeaderCellDef mat-sort-header>Name</mat-header-cell> <mat-cell *matCellDef="let element">{{element.name}}</mat-cell> </ng-container> <ng-container matColumnDef="Age"> <mat-header-cell *matHeaderCellDef mat-sort-header>Age</mat-header-cell> <mat-cell *matCellDef="let element">{{element.age}}</mat-cell> </ng-container> <mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row> <mat-row *matRowDef="let row; columns: displayedColumns;"></mat-row> </mat-table> <div *ngIf="dataSource.length === 0">No records found</div>

In the TypeScript component, define the data source and displayed columns.

import { Component } from '@angular/core'; @Component({ selector: 'app-data-table', templateUrl: './data-table.component.html', styleUrls: ['./data-table.component.css'] }) export class DataTableComponent { displayedColumns: string[] = ['Name', 'Age']; dataSource: any[] = []; // Example empty data source }

Alternative Approaches

Other methods include using the *matNoDataRow directive introduced in Angular Material 10 or above, as mentioned in Answer 1, and leveraging footer rows as shown in Answer 3. The *matNoDataRow directive provides a built-in way to display a row when no data matches the filter.

<tr class="mat-row" *matNoDataRow> <td class="mat-cell" [attr.colspan]="displayedColumns.length"> No data matching the filter. </td> </tr>

The footer row method involves adding a special column for the empty message and conditionally displaying it in the footer.

Analysis and Best Practices

The *ngIf method is highly flexible and works with any Angular version, allowing clear separation of logic and presentation. However, for newer versions of Angular Material, the *matNoDataRow directive might be more integrated. The choice depends on specific requirements and the Angular version used. It is recommended to balance usability and performance based on project scenarios.

Conclusion

Displaying empty messages in Angular Material data tables can be efficiently achieved using conditional directives like *ngIf. This method ensures a clean user interface and enhances user experience by providing immediate feedback when no data is available.

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.