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">










