L'approche la plus moderne - et sans doute la plus évolutive - pour surmonter ces défis avec de grands ensembles de données est incarnée par l'approche de La directive collectionRepeat de Ionic et d'autres implémentations similaires. Un terme sophistiqué pour cela est élimination des occlusions Mais on peut le résumer ainsi : ne limitez pas simplement le nombre d'éléments DOM rendus à un nombre arbitraire (mais toujours élevé) paginé comme 50, 100, 500... à la place, se limiter à autant d'éléments que l'utilisateur peut voir .
Si vous faites quelque chose comme ce que l'on appelle communément le "défilement infini", vous réduisez l'espace de travail de l'utilisateur. initial Le DOM compte un peu, mais il gonfle rapidement après quelques rafraîchissements, car tous ces nouveaux éléments sont simplement ajoutés en bas de page. Le défilement devient un jeu d'enfant, parce que le défilement est une question de nombre d'éléments. Il n'y a rien d'infini là-dedans.
considérant que le collectionRepeat
L'approche consiste à n'utiliser que le nombre d'éléments pouvant s'insérer dans la fenêtre d'affichage. les recycler . Lorsqu'un élément tourne hors de vue, il est détaché de l'arbre de rendu, rempli de données pour un nouvel élément de la liste, puis rattaché à l'arbre de rendu à l'autre extrémité de la liste. C'est le moyen le plus rapide connu de l'homme pour faire entrer et sortir de nouvelles informations du DOM, en utilisant un ensemble limité d'éléments existants, plutôt que le cycle traditionnel de création/destruction... création/destruction. En utilisant cette approche, vous pouvez véritablement mettre en œuvre un infini défilement.
Notez que vous n'êtes pas obligé d'utiliser Ionic pour utiliser/hack/adaptation collectionRepeat
ou tout autre outil similaire. C'est pourquoi ils l'appellent open-source :-) (Cela dit, l'équipe Ionic fait des choses assez ingénieuses, qui méritent votre attention).
Il y a au moins un excellent exemple de faire quelque chose de très similaire dans React. Seulement, au lieu de recycler les éléments avec un contenu mis à jour, vous choisissez simplement de ne pas rendre ce qui n'est pas visible dans l'arbre. C'est très rapide sur 5000 éléments, bien que leur implémentation POC très simple permette un peu de scintillement...
De plus... pour faire écho à d'autres messages, l'utilisation de track by
est très utile, même avec de petits ensembles de données. Considérez-le comme obligatoire.
10 votes
Voulez-vous vraiment afficher TOUTES les lignes ? Pourquoi ne pas afficher seulement le nombre de lignes que l'utilisateur peut voir ? Par exemple, vous pourriez utiliser
limitTo
pour afficher seulement 20 éléments :<p ng-repeat="data in dataset | limitTo:20">{{data}}</p>
Cela ne montre que 20 articles. Vous pourriez alors utiliser des pages et afficher les 10 éléments suivants ou quelque chose du genre :)0 votes
Pour ce qui est de "rapporter quand il a fini de se répéter", vous pouvez utiliser une directive personnalisée en plus de ng-repeat. (voir ici la réponse sélectionnée) stackoverflow.com/questions/13471129/
0 votes
Référez-vous à cette question, elle vous aidera sûrement. [entrer la description du lien ici] [1] [1] : stackoverflow.com/questions/25481021/