177 votes

Comment limiter la répétition de ngFor à un certain nombre d'éléments en Angular ?

Mon code :

<li *ngFor="let item of list; let i=index" class="dropdown-item" (click)="onClick(item)">
  <template [ngIf]="i<11">{{item.text}}</template>
</li>

J'essaie de faire en sorte que seuls 10 éléments de liste soient affichés à un moment donné. Comme suggéré dans le répondre ici J'ai utilisé des ngIf, mais le résultat est que des éléments de liste vides (au-delà de 10) apparaissent sur la page.

388voto

Günter Zöchbauer Points 21340

Cela me semble plus simple

<li *ngFor="let item of list | slice:0:10; let i=index" class="dropdown-item" (click)="onClick(item)">{{item.text}}</li>

Plus proche de votre approche

<ng-container *ngFor="let item of list" let-i="index">
  <li class="dropdown-item" (click)="onClick(item)" *ngIf="i<11">{{item.text}}</li>
</ng-container>

4 votes

La deuxième approche vous donne une meilleure flexibilité pour l'interface utilisateur, c'est-à-dire *ngIf="i < 11 || showAll"

1 votes

Bonjour, disons que le tableau contient 12 éléments et que nous en découpons 3... comment obtenir le reste pour l'afficher ailleurs (par exemple dans un bouton : 9 éléments restants) ?

1 votes

Fait slice:0:10 affecter le tableau original ??

29voto

Nidhin Joseph Points 7387

Vous pouvez appliquer directement slice() à la variable. Démonstration de StackBlitz

<li *ngFor="let item of list.slice(0, 10);">
   {{item.text}}
</li>

25voto

ManojMeria Points 149

Par exemple, si nous voulons afficher uniquement les 10 premiers éléments d'un tableau, nous pouvons utiliser la méthode suivante SlicePipe comme ça :

<ul>
     <li *ngFor="let item of items | slice:0:10">
      {{ item }}
     </li>
</ul>

7voto

Ana El Bembo Points 127

Cela fonctionne très bien :

<template *ngFor="let item of items; let i=index" >
 <ion-slide *ngIf="i<5" >
  <img [src]="item.ItemPic">
 </ion-slide>
</template>

3voto

En plus de la réponse de @Gunter, vous pouvez utiliser trackBy pour améliorer les performances. trackBy prend une fonction qui a deux arguments : index et item. Vous pouvez retourner une valeur unique dans l'objet de la fonction. Cela empêchera le re-rendu des éléments déjà affichés dans ngFor. Dans votre html, ajoutez trackBy comme ci-dessous.

<li *ngFor="let item of list; trackBy: trackByFn;let i=index" class="dropdown-item" (click)="onClick(item)">
  <template [ngIf]="i<11">{{item.text}}</template>
</li>

Et écrivez une fonction comme celle-ci dans votre fichier .ts.

trackByfn(index, item) { 
  return item.uniqueValue;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X