我需要在客户端实现分页。从背面,我收到以卡片形式带来的待办事项。我决定连接mat-paginator,但是遇到了问题。我将待办事项数传递给[length] =“ length”,但是将页面翻转并将总数分割成几部分不起作用,将它们显示在不同的页面上。例如,我现在有13个待办事项(可能还有更多),我需要在1页上显示4个待办事项。 4然后在第二个上,依此类推。 这是我的代码。
component.html
...
<div class="tasks-list" >
<mat-card class="task-card" *ngFor="let task of tasks">
<mat-card-header>
<mat-card-title>
/////////some code////////////
</mat-card>
</div>
<mat-paginator [length]="length"
[pageSize]="4"
[pageSizeOptions]="[4, 8, 12]">
</mat-paginator>
component.ts
@ViewChild(MatPaginator) paginator: MatPaginator;
constructor(private taskService: TaskListService) {}
ngOnInit() { this.getTasks();}
getTasks() {
this.taskService.getTasks()
.subscribe(
(data) => {
this.tasks = data;
this.length = this.tasks.length;
})
}
我很困惑下一步该怎么做。我到处主要写如何在表中打开分页,但是我没有表。如果该行添加了“异步”,那么它将无法正常工作。
答案 0 :(得分:2)
分页器与表格数据源一起使用。
所有分页工作都是在iterator方法内完成的。此方法计算出跳过并采取并将其分配给卡列表的dataSource。
查看:
<div class="tasks-list">
<mat-card class="task-card" *ngFor="let task of dataSource">
<mat-card-header>
<mat-card-title>
{{task}}
</mat-card-title>
</mat-card-header>
</mat-card>
</div>
<mat-paginator #paginator [pageSize]="pageSize" [pageSizeOptions]="[1, 10, 20]" [showFirstLastButtons]="true" [length]="totalSize"
[pageIndex]="currentPage" (page)="pageEvent = handlePage($event)">
</mat-paginator>
组件:
export class PaginatorOverviewExample implements OnInit {
public tasks: any[];
public dataSource: any;
public pageSize = 1;
public currentPage = 0;
public totalSize = 0;
@ViewChild(MatPaginator) paginator: MatPaginator;
ngOnInit() { this.getTasks(); }
getTasks() {
// Replace with HTTP call
var data = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"];
this.dataSource = new MatTableDataSource<any>(data);
this.dataSource.paginator = this.paginator;
this.tasks = data;
this.totalSize = this.tasks.length;
this.iterator();
}
handlePage(event?: PageEvent) {
this.currentPage = event.pageIndex;
this.pageSize = event.pageSize;
this.iterator();
}
private iterator() {
const end = (this.currentPage + 1) * this.pageSize;
const start = this.currentPage * this.pageSize;
const part = this.tasks.slice(start, end);
this.dataSource = part;
}
}