J'ai une application Angular2
avec une component
où j'ai une table. La table est générée via la directive *ngFor
. Chaque ligne de la table
est un objet avec 9 champs en cours de chargement à partir du backend lorsque le composant est initialisé . -bootstrap pour le module angulaire . ng-boorstrap En particulier, j'essaie d'implémenter le composant pagination
.
Quelqu'un pourrait-il expliquer comment mettre le code pour qu'il rende, par exemple, seulement 10 lignes par page pls? Ou donnez-moi une référence où la mise en œuvre est faite.
Ce que j'ai fait c'est:
NgbModule
à mon module où je déclare mon composant ainsi que le module NgbPaginationConfig
(nécessaire pour utiliser la pagination personnalisée)mettre le code ngb-pagination
dans la vue de ma component
comme ceci
<table class="table table-striped">
<thead>
<tr>
<th>Tracking #</th>
<th>Brand</th>
<th>Geography</th>
<th>Country</th>
<th>Contract Name</th>
<th>Project Name</th>
<th>Status</th>
<th>$US BMC</th>
<th>Release #</th>
<th id="column-last"></th>
</tr>
</thead>
<tbody>
<tr *ngFor="let item of viewRows ">
<td>{{item.trackingNr}}</td>
<td>{{item.brand}}</td>
<td>{{item.geo}}</td>
<td>{{item.country}}</td>
<td>{{item.contractName}}</td>
<td>{{item.projectName}}</td>
<td>{{item.status}}</td>
<td>{{item.usBmc}}</td>
<td>{{item.releaseNr}}</td>
<td id="column-last">
<span class="awficon-edit" id="row-icons"></span>
<span class="awficon-close-2" id="row-icons"></span>
</td>
</tr>
</tbody>
c'est ma solution de travail . API pour ngb-pagination: https://ng-bootstrap.github.io/#/components/pagination
...
</table>
<ngb-pagination [collectionSize]="totalItems" [pageSize]="itemsPerPage" [(page)]="page" [maxSize]="7" [rotate]="true" (pageChange)="loadPage($event)"></ngb-pagination>
Dans votre composant, vous en avez besoin comme ça. N'oubliez pas de définir votre variable dans le constructeur:
itemsPerPage: number;
totalItems: any;
page: any;
previousPage: any;
...
loadPage(page: number) {
if (page !== this.previousPage) {
this.previousPage = page;
this.loadData();
}
}
...
loadData() {
this.dataService.query({
page: this.page - 1,
size: this.itemsPerPage,
}).subscribe(
(res: Response) => this.onSuccess(res.json(), res.headers),
(res: Response) => this.onError(res.json())
)
}
Je cherchais des réponses à cette même question et personne ne semble avoir répondu clairement.
Voici ma solution:
ngbPagination avec ngFor dans Angular 7
export class HomeComponent implements OnInit {
currentPage = 1;
itemsPerPage = 5;
pageSize: number;
constructor() { }
public onPageChange(pageNum: number): void {
this.pageSize = this.itemsPerPage*(pageNum - 1);
}
public changePagesize(num: number): void {
this.itemsPerPage = this.pageSize + num;
}
}
<div class="container-fluid">
<div class="col-6 input-group">
<div class="col-5 input-group-addon">
<ngb-pagination [collectionSize]="users.length" #numPages [pageSize]="itemsPerPage" [(page)]="currentPage" (pageChange)="onPageChange(currentPage)"></ngb-pagination>
</div>
<div class="col-1 input-group-addon">
<input class="input-sm text-center" type="number" [min]="10" [max]="users.length" step="1" [(ngModel)]="itemsPerPage" (onClick)="changePagesize(pageSize)">
</div>
</div>
<ul *ngIf="users">
<li *ngFor="let user of users | slice: pageSize | slice: 0:itemsPerPage">
<img [src]="user.avatar" alt="{{ user.avatar }}">
<p>{{ user.id }}. {{ user.first_name }} {{ user.last_name }}</p>
</li>
</ul>
<pre><span class="float-md-left">Page: {{ currentPage }} / {{numPages.pageCount}}</span><span class="float-md-right">Found items: {{ itemsPerPage }} / {{ users.length }}</span></pre>
</div>
Cette solution s'applique également à Angular 6. Je ne l'ai pas testée sur d'autres versions.
Pour plus d'informations, consultez documentation . Malheureusement ... il manque des informations essentielles concernant l'itération de ngFor.
Un autre problème que j'avais était comment définir le nombre de pages. J'ai décidé d'ajouter ma solution complète à ceux qui ont le même problème. J'ai trouvé cette réponse ici . Prenez note de l'identifiant #numPages ci-dessus.
D'accord. J'ai trouvé une solution géniale dans github . Découvrez-la . https://github.com/michaelbromley/ng2-pagination