Разбивка на страницы не работает в угловых 7. (Я использую угловой материал) - PullRequest
2 голосов
/ 07 марта 2019

Мне нужно реализовать нумерацию страниц на стороне клиента. Со спины я получаю задачу, которую я несу в виде карточек. Я решил подключить mat-paginator, но столкнулся с проблемой. Я передал число todo в [length] = "length", но переворачивание страниц и разбиение общего количества на части не работает, отображение их на разных страницах. Например, у меня сейчас 13 задач (может быть больше), и мне нужно отобразить 4 задачи на 1 странице. Потом 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;
    }) 
}

Я запутался, что делать дальше, чтобы это работало. Везде я в основном пишу, как включить нумерацию страниц в таблицах, но у меня нет таблицы. Если в строке добавить 'async', она не будет работать.

1 Ответ

2 голосов
/ 07 марта 2019

Пагинатор работает с источником данных таблицы.

Вся работа по подкачке выполняется из метода итератора.Этот метод обрабатывает пропуск и принимает и назначает его источнику данных для списка карт.

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;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...