Создать свой пагинатор на ангурял4

232
14 сентября 2018, 00:20

Хочу создать свой пагинатор ( на вход количество страниц, на выход этот компонент должен выдавать текущую страницу). Я думал циклом вывести список и посредством ngClass задать условие выбора активного/ пассивного класса. Но как сделать в ангуляре цикл (то есть, *ngFor перебирает массив, а надо же от 0 до N). И на что опираться при выборе активного/ пассивного класса, какой флаг делать?

<ul>
<li *ngFor="как-то 0 to N" ngClass = "{'active': '!какой-нибудьФлаг', 'passive': 'какой-нибудьФлаг'}"> </li>
</ul>

Подскажите, как реализовать (мб мою идею, главное без использования готовых библиотек - bootsrap и тд?

Answer 1
@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);
    }
}
READ ALSO
Размер изображения Monaco Editor

Размер изображения Monaco Editor

Можно ли в подсказки при редактировании css кода, в контексте класса или id, при добавлении background или background-image, и написании width: дальше появлялась...

231
Font Awesome HTML

Font Awesome HTML

Всем привет, помогите, пожалуйстаЕсть input[type='submit']

236
Bootstrap 4 Grids

Bootstrap 4 Grids

В данный момент этот кусок выходит так

223
Преимущество задания такого тега table?

Преимущество задания такого тега table?

Всем привет, в чем преимущество задания такого тега table в современных браузерах?

212