【发布时间】:2020-04-26 13:18:21
【问题描述】:
我的 Angular Material Application 遇到了一些问题。我正在使用带有分页器的数据表。 数据不必排序。
在加载数据时,我正在展示一个 mat-spinner
<div *ngIf="schools !== undefined">
<mat-spinner *ngIf="showSpinner" style="margin:0 auto;"></mat-spinner>
<div *ngIf="!showSpinner">
Keine Daten gefunden.
</div>
</div>
<div *ngIf="schools !== undefined">
<mat-table [dataSource]="dataSource">
...
</mat-table>
<mat-paginator [pageSizeOptions]="[10, 20, 50, 100]" [pageSize]="20" showFirstLastButtons></mat-paginator>
</div>
在正常情况下,我正在加载数据,当加载数据并显示数据时微调器停止旋转。这工作得很好。
但是对于一个大约有 400 行的表格,我遇到了这个问题:
成功加载数据后,微调器会变得非常缓慢大约一秒钟,并且数据表会显示所有内容。 (由分页器分隔)
从 api 加载数据大约需要 400 毫秒,解析它大约需要 3 毫秒,所以这应该不是问题。
我正在加载这样的数据:
ngOnInit() {
setTimeout(() => {
this.showSpinner = false;
}, 5000);
this.userID = this.authService.getCurrentUser.uid;
this.loadData();
}
loadData() {
this.apiService.getSchools().subscribe((schoolsData: any) => {
this.schools = this.refParser.parse(schoolsData);
this.dataSource = new MatTableDataSource(this.schools);
this.cdr.detectChanges();
this.dataSource.paginator = this.paginator;
});
}
我已经在 stackoverflow 上找到了一篇对我有帮助的帖子 (Angular 6 MatTable Performance in 1000 rows.)。 但这对我没有帮助:(
我是这样尝试的:
ngOnInit() {
setTimeout(() => {
this.showSpinner = false;
}, 5000);
this.userID = this.authService.getCurrentUser.uid;
//this.loadData();
this.dataSource = new MatTableDataSource();
this.dataSource.paginator = this.paginator;
}
ngAfterViewInit(){
setTimeout(() => {
this.apiService.getSchools().subscribe((schoolsData: any) => {
this.schools = this.refParser.parse(schoolsData);
this.dataSource.data = this.schools;
this.cdr.detectChanges();
})
})
}
它没有给我任何性能提升。唯一发生的事情是,分页器不再工作了。
有人知道什么可以帮助我提高应用程序的性能吗?
感谢您的回答:)
【问题讨论】:
-
也是一个有用的答案,类似于所选答案,但包括将分页器设置为静态以允许在
ngOnInit- stackoverflow.com/a/61726721/1148107 中设置它
标签: angular performance datatable angular-material