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.

  • ๐Ÿงฑ Structure: Les balises table, tr, td et th constituent toujours la grille, donc aucun balisage spรฉcifique ร  AngularJS ne remplace le HTML standard.
  • (I.e. Population : La directive ng-repeat parcourt un tableau sur l'objet scope et รฉmet une ligne pour chaque รฉlรฉment trouvรฉ.
  • ๏ธ Classement: Le filtre orderBy trie les lignes selon n'importe quelle clรฉ, et un indicateur reverse inverse le sens du tri sur demande.
  • ๐Ÿ”ค Mise en page: Le filtre de mise en majuscules met en majuscules une seule colonne sans modifier les donnรฉes sous-jacentes dans le contrรดleur.
  • ???? Recherche: Le filtre associรฉ ร  une entrรฉe ng-model rรฉduit le nombre de lignes visibles au fur et ร  mesure que le lecteur saisit du texte.
  • (I.e. Numรฉrotage: La propriรฉtรฉ $index fournit un compteur ร  base zรฉro, donc l'ajout de un produit un numรฉro de ligne lisible.
  • ๐Ÿš€ ร‰chelle: Au-delร  de mille lignes, associez limitTo ร  la pagination et track par pour que la page reste rรฉactive.

Tableau AngularJS

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

  1. balise โ€“ Il sโ€™agit de la balise principale utilisรฉe pour afficher le tableau.
  2. โ€“ Cette balise est utilisรฉe pour sรฉparer les lignes du tableau.
  3. โ€“ Cette balise est utilisรฉe pour afficher les donnรฉes rรฉelles du tableau.
  4. โ€“ 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.

Remplir et afficher des donnรฉes dans un tableau

  1. 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.
  2. 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.

Remplir et afficher des donnรฉes dans un tableau

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

  1. 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.
  2. C'est la premiรจre รฉtape de la crรฉation d'un tableau, et nous utilisons le รฉtiqueter.
  3. 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.
  4. 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

Remplir et afficher des donnรฉes dans un tableau

ร€ 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.

Trier le tableau avec le filtre OrderBy

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

  1. 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

Trier le tableau avec le filtre OrderBy

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.

Tableau d'affichage avec filtre majuscule

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

  1. 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

Tableau d'affichage avec filtre majuscule

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.

Afficher l'index du tableau

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

  1. 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

Afficher l'index du tableau

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:

  1. Le champ d'entrรฉe รฉcrit ce qui est saisi dans searchText sur le terrain.
  2. filter : searchText conserve les lignes dont le nom ou Description contient cette sous-chaรฎne, sans tenir compte de la casse.
  3. Pour effectuer une recherche dans une seule colonne, transmettez un objet : filter : {Name : searchText}.
  4. 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">

FAQ

ng-repeat requiert une clรฉ unique pour chaque ligne. Deux valeurs identiques gรฉnรจrent une erreur de doublons. Ajoutez une propriรฉtรฉ distincte ou รฉcrivez track par $index, la position de la ligne devient donc la clรฉ au lieu de sa valeur.

Oui. Passez un tableau de clรฉs, tel que orderBy : ['Name','DescriptAngularJS trie d'abord selon la premiรจre clรฉ, puis dรฉpartage les รฉgalitรฉs avec la seconde. Prรฉfixez une clรฉ par un signe moins pour inverser uniquement cette clรฉ.

Chaque ligne ng-repeat expose les boolรฉens $even et $odd. Liez l'un d'eux avec ng-class ou ng-if pour appliquer une couleur de fond, ce qui produit des lignes rayรฉes sans aucun sรฉlecteur CSS supplรฉmentaire sur le tableau.

Des assistants tels que Copilote GitHub Ils crรฉent rapidement le balisage ng-repeat, mais inventent encore des chemins de script et font des fautes d'orthographe dans les attributs. Vรฉrifiez chaque suggestion par rapport ร  la documentation. Rรฉfรฉrence de filtre AngularJS avant le navireping.

Les outils d'IA rรฉรฉcrivent ng-repeat sous forme de bloc de contrรดle de flux et dรฉplacent les filtres dans des pipes ou des signaux. Parce que Angulaire ne comporte pas de pipeline orderBy ou filter intรฉgrรฉ ; vรฉrifiez manuellement chaque tri et recherche gรฉnรฉrรฉs.

Rรฉsumez cet article avec :