Хочу создать свой пагинатор ( на вход количество страниц, на выход этот компонент должен выдавать текущую страницу). Я думал циклом вывести список и посредством ngClass задать условие выбора активного/ пассивного класса. Но как сделать в ангуляре цикл (то есть, *ngFor перебирает массив, а надо же от 0 до N). И на что опираться при выборе активного/ пассивного класса, какой флаг делать?
<ul>
<li *ngFor="как-то 0 to N" ngClass = "{'active': '!какой-нибудьФлаг', 'passive': 'какой-нибудьФлаг'}"> </li>
</ul>
Подскажите, как реализовать (мб мою идею, главное без использования готовых библиотек - bootsrap и тд?
@Component({
selector: 'app-some-component',
template: `
<div *ngFor="let data of pagedData">
{{ data }}
</div>
<div *ngFor="let page of pages" (click)="paginate(page)" [class.active]="page === activePage">
{{ page }}
</div>
`
})
export class SomeComponent {
// Оригинальные данные, могут быть получены через API
// Immutable
public data: any[] = [];
// Кол-во элементов на страницу
public itemsPerPage = 10;
// Кол-во страниц
public pagesCount = Math.ceil(this.data.length / this.itemsPerPage);
// Создаем численный массив, основанный на количестве страниц
// если `pageCount = 5`, то `pages = [1, 2, 3, 4, 5]` и тд.
public pages: number[] = Array.from({
length: this.pagesCount
}).map((_, i) => i += 1);
// Пагинированные данные
public pagedData: any[] = this.data.slice(0, this.itemsPerPage);
// Текущая выбранная страница
public activePage = 1;
public paginate(page: number): void {
// Если юзер кликнул на ту же страницу - выходим из функции
if (this.activePage === page) {
return;
}
this.activePage = page;
this.pagedData = this.data.slice(this.itemsPerPage * page - this.itemsPerPage, this.itemsPerPage * page);
}
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей