Я строю компонент. Это простой список с нумерацией страниц, который извлекает данные из веб-службы. Я использую bootstrap для вывода списка значений и ngx-bootstrap pagination component .
Проблема в том, что свойство currentPage не работает должным образом.
Значение привязано к переменной, но компонент отображает неверную информацию.
Внутри компонента переменные имеют декоратор @Input
@Input() listFields?: string[]; //list of displayable fields in the list
@Input() resourceService: ResourceService<T>; //webservice to fetch data
@Input() pageSize ?: number; //number of items to receive from the webservice
@Input() currentPage ?: number = 1; //current page
@Input() modelParams?: HttpParams; //other parameters to send to the webservice
Переменные, описанные выше, отправляются в компонент нумерации страниц из ngx-bootstrap.
<pagination [(itemsPerPage)]="pageSize" [(ngModel)]="currentPage" [(totalItems)]="page.totalCount"
(pageChanged)="pageChanged($event)"></pagination>
Компонент, который я разрабатываю, получает значения от @inputs, как описано ниже.
<general-resource-list
[resourceService]="workshopService"
[listFields]="listFieldsWorkshop"
[currentPage]="currentPage"
[pageSize]="pageSize"
[modelParams]="pageParams">
</general-resource-list>
@Component({
selector: 'app-workshops-list',
templateUrl: './workshops-list.component.html',
styleUrls: ['./workshops-list.component.scss']
})
export class WorkshopsListComponent{
public listFieldsWorkshop = ['id','name','version'];
public title = "Workshop List";
public currentPage:number;
public pageSize:number;
public pageParams:HttpParams;
constructor(
public workshopService: WorkshopService,
public workShopRoute: ActivatedRoute,
public workshopRouter: Router) {
this.workShopRoute.queryParams.subscribe(params => {
this.pageParams = new HttpParams();
for(let key in params){
if(!["page","pageSize"].includes(key)){
this.pageParams = this.pageParams.append(key,params[key]);
}
}
this.currentPage = params['page']? params['page']:1;
this.pageSize = params['pageSize']? params['pageSize']:10;
});
}
}
Сначала я подумал, что @Input был загружен после рендеринга компонента, но даже если я установил значение в конструкторе или непосредственно в объявлениях переменных, он не работает.
P.S .: Свойство pageSize работает и используется так же, как currentPage.
P.S.2: Я не думаю, что это случай реализации ControlValueAccessor, это должно было быть реализовано в компоненте ngx-bootstrap, не так ли?