开发者问题收集

当角度材料表中没有记录时,如何显示“未找到记录”

2018-12-04
17200

我尝试使用下面的 stackblitz 链接在没有表数据时显示“未找到记录”消息,但当我使用 MatTableDataSource 类型的数据源时会出现问题。

stackblitz 链接: https://stackblitz.com/edit/angular-w9ckf8

下面是我使用的代码片段:

this.serviceDataSource = new MatTableDataSource(this.services);

对应的 html:

<table mat-table [dataSource]="serviceDataSource" matSort *ngIf="serviceDataSource.length > 0">
            <ng-container *ngFor="let disCol of serviceColumns" matColumnDef="{{disCol}}">
                <th mat-header-cell *matHeaderCellDef mat-sort-header>{{disCol}}</th>
                <td mat-cell *matCellDef="let rowValue">{{rowValue[disCol]}}</td>
            </ng-container>

            <tr mat-header-row *matHeaderRowDef="serviceColumns"></tr>
            <tr mat-row *matRowDef="let rowdata; columns: serviceColumns;"></tr>
        </table>

        <div *ngIf="serviceDataSource.length === 0">No records found</div>

下面是我收到的错误:

ERROR TypeError: Cannot read property 'length' of undefined

3个回答

使用 this.serviceDataSource.data.length 而不是 this.serviceDataSource.length 来获取数据源的长度。

检查 这个

在 Material Design 页面中,您可以看到 MatTableDataSource 正在使用数据对象来操作数据。

Material Data Source

user1503592
2018-12-04

它不适用于 serviceDataSource.length ,这是错误,因为您没有在控制器中实现, 请写入: serviceDataSource=[]

miladdn131
2018-12-04

问题在于在初始化之前访问 serviceDataSource 。最好进行未定义检查,或者简单地修改代码为 -

<div *ngIf="serviceDataSource?.length === 0">No records found</div>

<div *ngIf="serviceDataSource && serviceDataSource.length === 0">No records found</div>
Sunil Singh
2018-12-04