Angular Material Table 带排序和分页器
Angular Material Table with sort and paginator
我在我的项目中使用 Angular Material Table。 table 的数据将由父组件通过输入传递。这很好用。我还想在我的 table 中添加一个分页器,其中一列应该是 sortable。但是在设置排序和分页器时出现错误“....无法设置未定义的排序”。
<div id="table-overflow">
<mat-table [dataSource]="dataSourceLog" class="mat-elevation-z8" matSort matSortDisableClear>
<ng-container matColumnDef="actionTS">
<mat-header-cell *matHeaderCellDef mat-sort-header>TimeStamp</mat-header-cell>
<mat-cell *matCellDef="let element"> {{element.actionTSFormated}} </mat-cell>
</ng-container>
/* some more columns*/
<mat-header-row *matHeaderRowDef="displayedColumns; sticky: true"></mat-header-row>
<mat-row *matRowDef="let row; columns: displayedColumns;"></mat-row>
</mat-table>
</div>
<mat-paginator [pageSizeOptions]="[10, 20, 50]" showFirstLastButtons></mat-paginator>
.ts 文件
export class ProtocolLogTable implements OnInit{
@Input() dataSourceLog: MatTableDataSource<DataLog>;
timestampFrom: string;
timestampTo: string;
displayedColumns: string[] = ['actionTS' /* some more columns */];
@ViewChild(MatPaginator) paginator: MatPaginator;
@ViewChild(MatSort) sort: MatSort;
ngOnInit() {
this.dataSourceLog.sort = this.sort;
this.dataSourceLog.paginator = this.paginator;
}
}
可能您在创建组件后没有立即获取数据。尝试将您的代码从 ngOnInit
移动到 @Input
setter 像这样
public dataSourceLogValue: MatTableDataSource<DataLog>;
@Input()
public set dataSourceLog(value: MatTableDataSource<DataLog>) {
if (value) {
this.dataSourceLogValue = value;
}
}
并确保您在模板中将 dataSourceLog
重命名为 dataSourceLogValue
。
我在我的项目中使用 Angular Material Table。 table 的数据将由父组件通过输入传递。这很好用。我还想在我的 table 中添加一个分页器,其中一列应该是 sortable。但是在设置排序和分页器时出现错误“....无法设置未定义的排序”。
<div id="table-overflow">
<mat-table [dataSource]="dataSourceLog" class="mat-elevation-z8" matSort matSortDisableClear>
<ng-container matColumnDef="actionTS">
<mat-header-cell *matHeaderCellDef mat-sort-header>TimeStamp</mat-header-cell>
<mat-cell *matCellDef="let element"> {{element.actionTSFormated}} </mat-cell>
</ng-container>
/* some more columns*/
<mat-header-row *matHeaderRowDef="displayedColumns; sticky: true"></mat-header-row>
<mat-row *matRowDef="let row; columns: displayedColumns;"></mat-row>
</mat-table>
</div>
<mat-paginator [pageSizeOptions]="[10, 20, 50]" showFirstLastButtons></mat-paginator>
.ts 文件
export class ProtocolLogTable implements OnInit{
@Input() dataSourceLog: MatTableDataSource<DataLog>;
timestampFrom: string;
timestampTo: string;
displayedColumns: string[] = ['actionTS' /* some more columns */];
@ViewChild(MatPaginator) paginator: MatPaginator;
@ViewChild(MatSort) sort: MatSort;
ngOnInit() {
this.dataSourceLog.sort = this.sort;
this.dataSourceLog.paginator = this.paginator;
}
}
可能您在创建组件后没有立即获取数据。尝试将您的代码从 ngOnInit
移动到 @Input
setter 像这样
public dataSourceLogValue: MatTableDataSource<DataLog>;
@Input()
public set dataSourceLog(value: MatTableDataSource<DataLog>) {
if (value) {
this.dataSourceLogValue = value;
}
}
并确保您在模板中将 dataSourceLog
重命名为 dataSourceLogValue
。