J'essaie d'implémenter la pagination mais cela ne fonctionne pas. Voici mon code:
pager.service.ts:
import * as _ from 'underscore';
@Injectable({
providedIn: 'root',
})
export class PagerService {
getPager(totalItems: number, currentPage: number = 1, pageSize: number = 10) {
// calculate total pages
let totalPages = Math.ceil(totalItems / pageSize);
let startPage: number, endPage: number;
if (totalPages <= 10) {
// less than 10 total pages so show all
startPage = 1;
endPage = totalPages;
} else {
// more than 10 total pages so calculate start and end pages
if (currentPage <= 6) {
startPage = 1;
endPage = 10;
} else if (currentPage + 4 >= totalPages) {
startPage = totalPages - 9;
endPage = totalPages;
} else {
startPage = currentPage - 5;
endPage = currentPage + 4;
}
}
// calculate start and end item indexes
let startIndex = (currentPage - 1) * pageSize;
let endIndex = Math.min(startIndex + pageSize - 1, totalItems - 1);
// create an array of pages to ng-repeat in the pager control
let pages = _.range(startPage, endPage + 1);
// return object with all pager properties required by the view
return {
totalItems: totalItems,
currentPage: currentPage,
pageSize: pageSize,
totalPages: totalPages,
startPage: startPage,
endPage: endPage,
startIndex: startIndex,
endIndex: endIndex,
pages: pages
};
}
}
quick-worker-list.component.ts:
import { JobService } from '@app/services';
import { PagerService } from './../../../services/pager.service';
import { Component, OnInit, Input } from '@angular/core';
import * as _ from 'underscore';
@Component({
selector: 'app-quick-worker-list',
templateUrl: './quick-worker-list.component.html',
styles: []
})
export class QuickWorkerListComponent implements OnInit {
S3ImageUrl: string;
// array of all items to be paged
private workerData: any[];
// pager object
pager: any = {};
// paged items
pagedItems: any[];
constructor(private pagerService: PagerService, private jobService: JobService) {
}
ngOnInit() {
this.jobService.getQuickJobWorkerList(1301, 1)
.map((response: Response) => response.json())
.subscribe(data => {
// set items to json response
this.workerData = data;
// initialize to page 1
this.setPage(1);
});
}
setPage(page: number) {
if (page < 1 || page > this.pager.totalPages) {
return;
}
// get pager object from service
this.pager = this.pagerService.getPager(this.allItems.length, page);
// get current page of items
this.pagedItems = this.allItems.slice(this.pager.startIndex, this.pager.endIndex + 1);
}
}
Je reçois cette erreur:
QuickWorkerListComponent_Host.ngfactory.js? [sm]: 1 ERREUR Erreur: StaticInjectorError (AppModule) [QuickWorkerListComponent -> PagerService]: StaticInjectorError (Platform: noyau) [QuickWorkerListComponent -> PagerService]: NullInjectorError (NullInjectorError: aucun fournisseur pour PagerService!). à NullInjector.Push ../ node_modules/@angular/core/fesm5/core.js.NullInjector.get (core.js: 3228) à resolToken (core.js: 3473) à tryResolveToken (core.js: 3417) à StaticInjector .Push ../ node_modules/@angular/core/fesm5/core.js.StaticInjector.get (core.js: 3314) à resolToken (core.js: 3473) à tryResolveToken (core.js: 3417) à StaticInjector.Push ../node_modules/@angular/core/fesm5/core.js.StaticInjector.get (core.js: 3314) à resolNgModuleDep (core.js: 19784) à NgModuleRef_.Push ../ node_modules/@ angular/core/fesm5 /core.js.NgModuleRef_.get (core.js: 20473) à resolNgModuleDep (core.js: 19784)
Après le texte d'erreur, vous devez importer et ajouter votre PagerService
dans la partie Fournisseur de votre app.module.ts
fichier:
providers: [
PagerService,
],
Et n'oubliez pas de le déclarer comme Injectable
:
@Injectable()
export class PagerService {
// ...
}
Votre erreur est liée à PagerService
, pas au trait de soulignement
NullInjectorError: Pas de fournisseur pour PagerService! à
assurez-vous que votre service est inscrit dans la liste des fournisseurs sur app.module ou a la déclaration Injectable
en haut:
@Injectable({
providedIn: 'root',
})
un exemple courant de service dans angular 7 est ci-dessous:
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root',
})
export class MyService{
constructor() { }
}
veuillez reportez-vous à la documentation pour plus de détails.
L'attribut Injectable doit être appliqué aux services de page ou de service de travail ou pour vérifier si vous injectez quelque chose dans ces services. La même chose s'applique à cela également.