html - 分页在 Angular 7 中不起作用。(我使用 Angular Material )

标签 html typescript angular-material angular7

我需要在客户端实现分页。从后面,我收到以卡片形式带来的待办事项。我决定连接 mat-paginator,但遇到了问题。我将待办事项的数量传递给[length] =“length”,但是翻页并将总数分成几部分不起作用,将它们显示在不同的页面上。例如,我现在有 13 个待办事项(可能还有更多),我需要在 1 页上显示 4 个待办事项。 4 然后第二个,依此类推。 这是我的代码。

组件.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>

组件.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;
    }) 
}

我很困惑下一步该做什么才能让它发挥作用。到处主要写如何在表格中打开分页,但是我没有表格。如果该行添加“async”,则它将不起作用。

最佳答案

分页器使用表数据源。

所有分页工作都是在迭代器方法内完成的。此方法计算出跳过和获取并将其分配给卡片列表的数据源。

Live Demo

查看:

<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;
  }
}

关于html - 分页在 Angular 7 中不起作用。(我使用 Angular Material ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55043614/

相关文章:

reactjs - Intersection Observer API 进入无限渲染循环

Angular 垫分隔器垂直宽度不调整

angular - Webpack 从模块导入的类不是构造函数

java - 如何使用 docx4j 将 HTML 转换为 .docx?

javascript - 如何在图像调整大小时缩放图像跨度的 x 和 y 坐标?

javascript - 如何在具有相同类名的 div 中单独接收 AJAX (json) 响应?

javascript - Angular 4错误类型错误: Cannot read property 'filter' of undefined

javascript - AngularJS 不再在 Firebug 控制台中显示特定错误

angular - 如何将 Angular Material mat-card 切换为全屏

php - 自定义主题中的 wordpress 页面选项卡?