Однажды у меня была похожая проблема, и путь к ее достижению состоит в создании массива разбитых на страницы данных вместо использования канала для разбивки на страницы, а затем в логике контроллера для поиска текущей страницы и обновления выбора для этой страницы.
Используйте эту службу для создания страниц с разбивкой по страницам
export class TablePageService {
constructor() {
}
getPager(totalItems: number, currentPage: number = 1, pageSize: number) {
// calculate total pages
const totalPages = Math.ceil(totalItems / pageSize);
const startPage = 1;
const endPage = totalPages;
// calculate start and end item indexes
const startIndex = (currentPage - 1) * pageSize;
const endIndex = Math.min(startIndex + pageSize - 1, totalItems - 1);
// create an array of pages to ng-repeat in the pager control
const pages = this.range(startPage, endPage);
// return object with all pager properties required by the view
return {
totalItems,
currentPage,
pageSize,
totalPages,
startPage,
endPage,
startIndex,
endIndex,
pages,
};
}
range(lowEnd, highEnd) {
const arr = [];
let c = highEnd - lowEnd + 1;
while ( c-- ) {
arr[c] = highEnd--;
}
return arr;
}
}
, и в вашем контроллере вы можете определить метод setPage, где pagedItems выдаст вам текущий набор отображаемых страниц
public setPage(page: number) {
this.pager = this.tablePageService.getPager(
this.tableContentList.length,
page,
this.tableConfig.pageSize
);
if (page < 1 || (page > this.pager.totalPages && page !== 1)) {
return;
}
this.pagedItems = this.tableContentList.slice(this.pager.startIndex, this.pager.endIndex + 1);
if (this.pagedItems.length < this.pager.pageSize) {
this.substituteItems = Array.from({
length: this.tableConfig.pageSize - this.pagedItems.length,
});
}
}