Я реализовал нумерацию страниц в angular приложении с этого сайта: Нумерация страниц
У меня есть два компонента для функции поиска. Первый родитель. Он содержит параметры поиска и кнопку, которая вызывает метод onSearch () . Второй - дочерний компонент с результатами поиска, отображаемыми в списке с нумерацией страниц. Вот как работает разбиение на страницы в дочернем компоненте:
<tr *ngFor="let item of searchResults | paginate: { itemsPerPage: numberOfItemsPerPage, currentPage: p, id: 'searchResults' };
index as i; let even=even; let odd=odd">
<td class="gridItemLeft">
<span class="label leftAlign">{{ i + 1 + (p-1)*numberOfItemsPerPage }}</span>
</td>
<td class="gridItemLeft">
<span class="label leftAlign">{{ item.id }}</span>
</td>
<td class="gridItemLeft">
<a [routerLink]="[getRouterLinkPage(item.requestType), item.id]">{{ item.typeName }}</a>
</td>
<td class="gridItemLeft">
<span class="label leftAlign">{{ item.date | date:'medium' }}</span>
</td>
<td class="gridItemLeft">
<span class="label leftAlign">{{ item.applicationUserUsername }}</span>
</td>
</tr>
...
<app-pagination-control (pageChange)="p = $event" autoHide="true" id="searchResults"></app-pagination-control>
Я создал этот класс:
import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core';
import { DEFAULT_TEMPLATE, DEFAULT_STYLES } from './template';
import { TranslateService } from '@ngx-translate/core';
function coerceToBoolean(input: string | boolean): boolean {
return !!input && input !== 'false';
}
/**
* The default pagination controls component. Actually just a default implementation of a custom template.
*/
@Component({
selector: 'app-pagination-control',
template: DEFAULT_TEMPLATE,
styles: [DEFAULT_STYLES],
changeDetection: ChangeDetectionStrategy.OnPush,
encapsulation: ViewEncapsulation.None
})
export class PaginationControlComponent {
@Input() id: string;
@Input() maxSize = 7;
@Input()
get directionLinks(): boolean {
return this._directionLinks;
}
set directionLinks(value: boolean) {
this._directionLinks = coerceToBoolean(value);
}
@Input()
get autoHide(): boolean {
return this._autoHide;
}
set autoHide(value: boolean) {
this._autoHide = coerceToBoolean(value);
}
@Input()
get responsive(): boolean {
return this._responsive;
}
set responsive(value: boolean) {
this._responsive = coerceToBoolean(value);
}
@Input() previousLabel = this.translateService.instant('Pagination.Previous');
@Input() nextLabel = this.translateService.instant('Pagination.Next');
@Input() screenReaderPaginationLabel = this.translateService.instant('Pagination.Pagination');
@Input() screenReaderPageLabel = this.translateService.instant('Pagination.Page');
@Input() screenReaderCurrentLabel = this.translateService.instant('Pagination.Current');
@Output() pageChange: EventEmitter<number> = new EventEmitter<number>();
constructor(
private translateService: TranslateService
) {
}
private _directionLinks = true;
private _autoHide = false;
private _responsive = false;
}
p установлен в 1 в дочернем компоненте. При переходе на третью страницу возникает ошибка. Затем снова нажмите кнопку поиска. Я должен быть на первой странице, если новый поиск дал более одной страницы в наборе результатов, но он остается на третьей странице. p не реинициализируется. Мой вопрос заключается в том, как мне передать данные, чтобы установить currentPage на 1, когда происходит событие поиска?
Я попытался установить p в качестве элемента Input, установить его в методе onSearch на 1 и отправить его потомку следующим образом:
<child-component [p]='p'></child-component>