Tableau AngularJS : Trier avec orderBy et filtre de casse-majuscules
⚡ Résumé intelligent
Le tri, l'ordonnancement et la mise en forme du texte des tableaux AngularJS reposent sur la directive ng-repeat et une expression de filtre. Cette page explique comment les paramètres orderBy, uppercase, filter et $index transforment un tableau HTML simple en une grille dynamique alimentée par les données.
Les tableaux sont l'un des éléments couramment utilisés en HTML lorsque vous travaillez avec des pages Web.
Tableaux en HTML sont conçus à l'aide de la balise HTML
- balise – Il s’agit de la balise principale utilisée pour afficher le tableau.
- – Cette balise est utilisée pour séparer les lignes du tableau.
- – Cette balise est utilisée pour afficher les données réelles du tableau.
- – Ceci est utilisé pour les données d’en-tête du tableau.
En utilisant les balises HTML disponibles ci-dessus avec AngularJS, nous pouvons faciliter le remplissage des données des tableaux. En bref, la directive ng-repeat est utilisée pour remplir les données du tableau.
Nous verrons comment y parvenir dans ce chapitre. Nous verrons également comment utiliser les filtres `orderBy` et `uppercase`, ainsi que l'attribut `$index` pour afficher les index des tableaux AngularJS. La première étape consiste à créer le balisage.
Remplir et afficher des données dans un tableau
Comme nous l'avons vu dans l'introduction de ce chapitre, la base de création de la structure des tableaux dans une page HTML reste la même.
La structure du tableau est toujours créée en utilisant les balises HTML normales de , , et . Cependant, les données sont renseignées à l'aide de la directive ng-repeat dans AngularJS.
Prenons un exemple simple de la façon dont nous pouvons implémenter des tableaux AngularJS.
Dans cet exemple,
Nous allons créer un tableau AngularJS qui contiendra les sujets des cours ainsi que leurs descriptions.
Étape 1) Nous allons d'abord ajouter une balise « style » à notre page HTML afin que le tableau puisse être affiché comme un véritable tableau.
- La balise de style est ajoutée à la page HTML. Il s'agit de la manière standard d'ajouter tous les attributs de formatage requis pour les éléments HTML.
- Nous ajoutons deux valeurs de style à notre tableau.
- L'une des solutions consiste à ajouter une bordure solide à notre tableau AngularJS.
- Deuxièmement, il convient d'ajouter un espacement autour des données de notre tableau AngularJS.
Étape 2) L'étape suivante consiste à écrire le code pour générer la table, et ses données.
<!DOCTYPE html> <html> <head> <meta chrset="UTF 8"> </head> <body> <title>Event Registration</title> <style> table,th,td{ border: 1px solid grey; padding:5px; } </style> <script src="https://code.angularjs.org/1.6.9/angular-route.js"></script> <script src="https://code.angularjs.org/1.6.9/angular.min.js"></script> <script src="https://code.angularjs.org/1.6.9/angular.js"></script> <script src="lib/bootstrap.js"></script> <script src="lib/bootstrap.css"></script> <h1> Guru99 Global Event</h1> <div ng-app="DemoApp" ng-controller="DemoController"> <table> <tr ng-repeat="ptutor in tutorial"> <td>{{ptutor.Name}}</td> <td>{{ptutor.Description}}</td> </tr> </table> </div> <script type="text/javascript"> var app = angular.module('DemoApp',[]); app.controller('DemoController',function($scope) { $scope.tutorial = [ {Name:"Controllers",Description :"Controllers in action"}, {Name:"Models",Description :"Models and binding data"}, {Name:"Directives",Description :"Flexibility of Directives"} ]}); </script> </body> </html>
⚠️ Attention : Cette liste est reproduite exactement telle que publiée, et quatre lignes qu'elle contient sont erronées. chrset fautes d'orthographe charsetTrois instances d'AngularJS se chargent simultanément, ce qui est une de trop. lib/bootstrap.js et lib/bootstrap.css n'existent pas. Gardez angular.min.js seulement.
Code Explication
- Nous créons d’abord une variable appelée « tutoriel » et lui attribuons des paires clé-valeur en une seule étape. Chaque paire clé-valeur sera utilisée comme données lors de l'affichage du tableau. La variable du didacticiel est ensuite affectée à l'objet scope afin qu'il soit accessible depuis notre vue.
- C'est la première étape de la création d'un tableau, et nous utilisons le étiqueter.
- Pour chaque ligne de données, nous utilisons la « directive ng-repeat ». Cette directive parcourt chaque paire clé-valeur dans l'objet de portée du didacticiel à l'aide de la variable ptutor.
- Enfin, nous utilisons le tag avec les paires clé-valeur (ptutor.Name et ptutor.Description) pour afficher les données du tableau AngularJS.
Si le code est exécuté avec succès, la sortie suivante s'affichera lorsque vous exécutez votre code dans le navigateur.
Sortie
À partir de la sortie ci-dessus,
- Nous pouvons voir que le tableau s'affiche correctement avec les données du tableau de paires clé-valeur définies dans le contrôleur.
- Les données du tableau ont été générées en parcourant chacune des paires clé-valeur à l'aide de la « directive ng-repeat ».
Les lignes brutes ne sont que le point de départ, car les filtres déterminent comment ces lignes sont ordonnées et formatées.
Filtre intégré AngularJS
Il est très courant d'utiliser les filtres intégrés dans AngularJS pour modifier la façon dont les données sont affichées dans les tableaux. Nous avons déjà vu les filtres en action dans un chapitre précédent. Faisons un bref récapitulatif des filtres avant de continuer.
Dans AngularJS, les filtres servent à formater la valeur d'une expression avant son affichage à l'utilisateur. Le filtre « uppercase », par exemple, prend une chaîne de caractères en sortie, la formate et affiche tous ses caractères en majuscules.
Ainsi, dans l'exemple ci-dessous, si la valeur de la variable « TutorialName » est « AngularJS », la sortie de l'expression ci-dessous sera « ANGULARJS ».
{{ TutorialName | uppercase }}
Dans cette section, nous examinerons plus en détail comment les filtres orderBy et majuscules peuvent être utilisés dans les tableaux.
Filtres AngularJS courants utilisés avec les tableaux
Le tableau ci-dessous compare les filtres les plus fréquemment utilisés dans une expression ng-repeat.
| Filtre | Interet | Exemple |
|---|---|---|
| commandé par | Trie les lignes selon une clé | | orderBy : 'Name' |
| une fonction filtre | Conserve les lignes correspondantes | | filter : searchText |
| majuscule | Texte en majuscules | | uppercase |
| minuscule | Texte en minuscules | | lowercase |
| limiterÀ | Nombre de rangées de casquettes | | limitTo : 25 |
| monnaie | Formats d'argent | | currency : '$' |
| données | Formats de dates | | date : 'dd MMM yyyy' |
| nombre | Définit les décimales | | number : 2 |
Le tri est le filtre demandé en premier par les lecteurs, le filtre orderBy vient donc ensuite.
Trier le tableau avec le filtre OrderBy
Ce filtre permet de trier le tableau en fonction de l'une de ses colonnes. Dans l'exemple précédent, le résultat pour les données de notre tableau AngularJS s'affichait comme ci-dessous.
| surchargés | Contrôleurs en action |
| Modèles | Modèles et données de liaison |
| Directives | Flexibilité des directives |
Prenons l'exemple de l'utilisation du filtre « orderBy » pour trier les données d'un tableau AngularJS en fonction de la première colonne.
<!DOCTYPE html> <html> <head> <meta chrset="UTF 8"> </head> <body> <title>Event Registration</title> <style> table,th,td{ border: 1px solid grey; padding:5px; } </style> <script src="https://code.angularjs.org/1.6.9/angular-route.js"></script> <script src="https://code.angularjs.org/1.6.9/angular.min.js"></script> <script src="https://code.angularjs.org/1.6.9/angular.js"></script> <script src="lib/bootstrap.js"></script> <script src="lib/bootstrap.css"></script> <h1> Guru99 Global Event</h1> <div ng-app="DemoApp" ng-controller="DemoController"> <table> <tr ng-repeat="ptutor in tutorial | orderBy : 'Name'"> <td>{{ptutor.Name}}</td> <td>{{ptutor.Description}}</td> </tr> </table> </div> <script type="text/javascript"> var app = angular.module('DemoApp',[]); app.controller('DemoController',function($scope) { $scope.tutorial = [ {Name:"Controllers",Description :"Controllers in action"}, {Name:"Models",Description :"Models and binding data"}, {Name:"Directives",Description :"Flexibility of Directives"} ]}); </script> </body> </html>
Code Explication
- Nous utilisons le même code que pour créer notre table, la seule différence cette fois est que nous utilisons le filtre « orderBy » avec la directive ng-repeat. Dans ce cas, nous disons que nous voulons trier la table par la clé « Nom ».
Si le code est exécuté avec succès, la sortie suivante s'affichera lorsque vous exécutez votre code dans le navigateur.
Sortie
De la sortie,
- On constate que les données du tableau AngularJS sont triées selon l'ordre de la première colonne. Le tableau est déclaré dans l'ordre Contrôleurs, Modèles, Directives ; par conséquent, sans filtre, les lignes apparaissent dans cet ordre.
orderBy : 'Name'organise les valeurs Name par ordre alphabétique, ce qui place les Directives avant les Modèles et produit Contrôleurs, Directives, Modèles.
Trier dans Reverse et à partir des en-têtes de colonnes
Le filtre orderBy accepte un deuxième argument. Passage true inverse le sens, et le stockage de la clé et de cet indicateur sur la portée permet à un lecteur de trier à nouveau le tableau en cliquant sur un en-tête, comme le trier par référence décrit.
<table> <tr> <th ng-click="sortKey='Name'; reverse=!reverse">Name</th> <th ng-click="sortKey='Description'; reverse=!reverse">Description</th> </tr> <tr ng-repeat="ptutor in tutorial | orderBy : sortKey : reverse"> <td>{{ptutor.Name}}</td> <td>{{ptutor.Description}}</td> </tr> </table>
Le tri modifie l'ordre des lignes. Le filtre suivant modifie l'affichage d'une seule colonne.
Tableau d'affichage avec filtre majuscule
Nous pouvons également utiliser le filtre uppercase pour convertir les données du tableau AngularJS en majuscules.
Jetons un coup d'œil à un exemple de la manière dont nous pouvons y parvenir.
<!DOCTYPE html> <html> <head> <meta chrset="UTF 8"> </head> <body> <title>Event Registration</title> <style> table,th,td{ border: 1px solid grey; padding:5px; } </style> <script src="https://code.angularjs.org/1.6.9/angular-route.js"></script> <script src="https://code.angularjs.org/1.6.9/angular.min.js"></script> <script src="https://code.angularjs.org/1.6.9/angular.js"></script> <script src="lib/bootstrap.js"></script> <script src="lib/bootstrap.css"></script> <h1> Guru99 Global Event</h1> <div ng-app="DemoApp" ng-controller="DemoController"> <table> <tr ng-repeat="ptutor in tutorial"> <td>{{ptutor.Name | uppercase}}</td> <td>{{ptutor.Description}}</td> </tr> </table> </div> <script type="text/javascript"> var app = angular.module('DemoApp',[]); app.controller('DemoController',function($scope) { $scope.tutorial = [ {Name:"Controllers",Description :"Controllers in action"}, {Name:"Models",Description :"Models and binding data"}, {Name:"Directives",Description :"Flexibility of Directives"} ]}); </script> </body> </html>
Code Explication
- Nous utilisons le même code que pour créer notre table, la seule différence cette fois est que nous utilisons le filtre majuscule. Nous utilisons ce filtre en conjonction avec le « ptutor.Name » afin que tout le texte de la première colonne soit affiché en majuscule.
Si le code est exécuté avec succès, la sortie suivante s'affichera lorsque vous exécutez votre code dans le navigateur.
Sortie
De la sortie,
- On voit qu'en utilisant le filtre « majuscules », toutes les données de la première colonne sont affichées avec des caractères majuscules.
La mise en forme d'une colonne est utile, et les lecteurs souhaitent souvent qu'un numéro de ligne apparaisse à côté.
Afficher l'index du tableau ($index)
Pour afficher l'index de la table, ajoutez un avec $index.
Jetons un coup d'œil à un exemple de la manière dont nous pouvons y parvenir.
<!DOCTYPE html> <html> <head> <meta chrset="UTF 8"> </head> <body> <title>Event Registration</title> <style> table,th,td{ border: 1px solid grey; padding:5px; } </style> <script src="https://code.angularjs.org/1.6.9/angular-route.js"></script> <script src="https://code.angularjs.org/1.6.9/angular.min.js"></script> <script src="https://code.angularjs.org/1.6.9/angular.js"></script> <script src="lib/bootstrap.js"></script> <script src="lib/bootstrap.css"></script> <h1> Guru99 Global Event</h1> <div ng-app="DemoApp" ng-controller="DemoController"> <table> <tr ng-repeat="ptutor in tutorial"> <td>{{$index + 1}}</td> <td>{{ptutor.Name}}</td> <td>{{ptutor.Description}}</td> </tr> </table> </div> <script type="text/javascript"> var app = angular.module('DemoApp',[]); app.controller('DemoController',function($scope) { $scope.tutorial = [ {Name:"Controllers",Description :"Controllers in action"}, {Name:"Models",Description :"Models and binding data"}, {Name:"Directives",Description :"Flexibility of Directives"} ]}); </script> </body> </html>
Code Explication
- Nous utilisons le même code que pour créer notre table, la seule différence cette fois est que nous ajoutons une ligne supplémentaire à notre table pour afficher la colonne d'index. Dans cette colonne supplémentaire, nous utilisons la propriété « $index » fourni par AngularJS, puis en utilisant l'opérateur +1 pour incrémenter l'index de chaque ligne.
Si le code est exécuté avec succès, la sortie suivante s'affichera lorsque vous exécutez votre code dans le navigateur.
Sortie
De la sortie,
- Vous pouvez voir qu'une colonne supplémentaire a été créée. Dans cette colonne, nous pouvons voir les index créés pour chaque ligne.
Trois lignes tiennent sur un seul écran. Un jeu de données réaliste ne tient pas sur trois lignes ; les lecteurs ont donc besoin d’un moyen de le parcourir.
Comment filtrer et rechercher des données de tableau AngularJS
AngularJS fournit un filtre nommé filterPlacé après ng-repeat, ce code compare chaque élément du tableau à une valeur et ne conserve que les lignes correspondantes. Liez cette valeur à une zone de texte avec ng-model et le tableau se rétrécit automatiquement pendant la saisie, sans gestionnaire d'événements ni code de contrôleur.
Ajouter une recherche en direct Box
Ajoutez un champ de saisie au-dessus du tableau et filtrez-le. Les deux champs partagent la même propriété de portée, ce qui permet à AngularJS de réévaluer l'expression à chaque frappe.
<input type="text" ng-model="searchText" placeholder="Search topics"> <table> <tr ng-repeat="ptutor in tutorial | filter : searchText"> <td>{{ptutor.Name}}</td> <td>{{ptutor.Description}}</td> </tr> </table>
Code Explication:
- Le champ d'entrée écrit ce qui est saisi dans
searchTextsur le terrain. filter : searchTextconserve les lignes dont le nom ou Description contient cette sous-chaîne, sans tenir compte de la casse.- Pour effectuer une recherche dans une seule colonne, transmettez un objet :
filter : {Name : searchText}. - Chaîne de filtres, donc
| filter : searchText | orderBy : 'Name'Il effectue d'abord une recherche, puis trie les survivants.
Gardez les grands tableaux réactifs
Un problème courant rencontré lors du développement de tableaux AngularJS est la gestion de grands ensembles de données contenant mille lignes ou plus. ng-répétition Cette directive crée une portée et un observateur par ligne, ce qui peut empêcher la page de répondre. Répartissez plutôt les lignes sur plusieurs pages et ajoutez-les. track by Les lignes existantes sont donc réutilisées au lieu d'être reconstruites.
<tr ng-repeat="ptutor in tutorial | filter : searchText | limitTo : 25 track by ptutor.Name">










