AngularJS-tabell: Sortera med orderBy och versalfilter
โก Smart sammanfattning
Sortering, ordning och textformatering av tabeller i AngularJS รคr alla beroende av ng-repeat-direktivet plus ett filteruttryck. Den hรคr sidan visar hur orderBy, uppercase, filter och $index fรถrvandlar en vanlig HTML-tabell till ett aktivt, datadrivet rutnรคt.
Tabeller รคr ett av de vanligaste elementen som anvรคnds i HTML nรคr man arbetar med webbsidor.
Tabeller i html รคr utformade med hjรคlp av HTML-taggen
- tagg โ Detta รคr huvudtaggen som anvรคnds fรถr att visa tabellen.
- โ Den hรคr taggen anvรคnds fรถr att separera raderna i tabellen.
- โ Denna tagg anvรคnds fรถr att visa den faktiska tabelldatan.
- โ Detta anvรคnds fรถr tabellhuvuddata.
Anvรคnda ovanstรฅende tillgรคngliga HTML-taggar tillsammans med AngularJS, kan vi gรถra det enklare att fylla i tabelldata. Kort sagt, direktivet ng-repeat anvรคnds fรถr att fylla i tabelldata.
Vi kommer att titta pรฅ hur man kan uppnรฅ detta i det hรคr kapitlet. Vi kommer ocksรฅ att titta pรฅ hur vi kan anvรคnda orderBy- och versalfilter tillsammans med attributet $index fรถr att visa AngularJS-tabellindex. Det fรถrsta steget รคr sjรคlva markupen.
Fyll i och visa data i en tabell
Som vi diskuterade i inledningen till detta kapitel fรถrblir grunden fรถr att skapa tabellstrukturen pรฅ en HTML-sida densamma.
Tabellens struktur skapas fortfarande med de vanliga HTML-taggarna , , och . Data fylls dock i genom att anvรคnda ng-repeat-direktivet i AngularJS.
Lรฅt oss titta pรฅ ett enkelt exempel pรฅ hur vi kan implementera AngularJS-tabeller.
I detta exempel,
Vi ska skapa en AngularJS-tabell som kommer att innehรฅlla kursรคmnen tillsammans med deras beskrivningar.
Steg 1) Vi kommer fรถrst att lรคgga till en "stil"-tagg pรฅ vรฅr HTML-sida sรฅ att tabellen kan visas som en riktig tabell.
- Stiltaggen lรคggs till pรฅ HTML-sidan. Detta รคr standardsรคttet att lรคgga till alla formateringsattribut som krรคvs fรถr HTML-element.
- Vi lรคgger till tvรฅ stilvรคrden till vรฅr tabell.
- En รคr att det ska finnas en heldragen kantlinje runt vรฅr AngularJS-tabell och
- Fรถr det andra bรถr det finnas utfyllnad pรฅ plats fรถr vรฅra AngularJS-tabelldata.
Steg 2) Nรคsta steg รคr att skriva koden fรถr att generera tabellen och dess data.
<!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>
โ ๏ธ Varning: Denna lista รฅterges exakt som den publicerades, och fyra rader i den รคr felaktiga. chrset felstavningar charsetTre AngularJS-byggen laddas samtidigt, vilket รคr en fรถr mycket. lib/bootstrap.js och lib/bootstrap.css finns inte. Behรฅll angular.min.js Endast.
Code Fรถrklaring
- Vi skapar fรถrst en variabel som heter "tutorial" och tilldelar den nรฅgra nyckel-vรคrdepar i ett steg. Varje nyckel-vรคrdepar kommer att anvรคndas som data nรคr tabellen visas. Handledningsvariabeln tilldelas sedan scope-objektet sรฅ att den kan nรฅs frรฅn vรฅr vy.
- Detta รคr det fรถrsta steget i att skapa en tabell, och vi anvรคnder mรคrka.
- Fรถr varje rad med data anvรคnder vi "ng-repeat-direktivet". Detta direktiv gรฅr igenom varje nyckel-vรคrdepar i tutorial scope-objektet med hjรคlp av variabeln ptutor.
- Slutligen anvรคnder vi tagga tillsammans med nyckel-vรคrdeparen (ptutor.Name och ptutor.Description) fรถr att visa AngularJS-tabelldata.
Om koden exekveras framgรฅngsrikt kommer fรถljande utdata att visas nรคr du kรถr din kod i webblรคsaren.
Produktion
Frรฅn ovanstรฅende utgรฅng,
- Vi kan se att tabellen visas korrekt med data frรฅn arrayen av nyckel-vรคrdepar som definieras i styrenheten.
- Tabelldatan genererades genom att gรฅ igenom vart och ett av nyckel-vรคrdeparen med hjรคlp av "ng-repeat-direktivet".
Rรฅa rader รคr bara utgรฅngspunkten, eftersom filter avgรถr hur dessa rader ordnas och formateras.
AngularJS inbyggt filter
Det รคr mycket vanligt att anvรคnda de inbyggda filtren i AngularJS fรถr att รคndra hur data visas i tabellerna. Vi har redan sett filter i aktion i ett tidigare kapitel. Lรฅt oss ha en snabb sammanfattning av filter innan vi fortsรคtter.
I AngularJS anvรคnds filter fรถr att formatera vรคrdet pรฅ ett uttryck innan det visas fรถr anvรคndaren. Ett exempel pรฅ ett filter รคr filtret 'versaler' som tar emot en strรคngutdata och formaterar strรคngen och visar alla tecken i strรคngen som versaler.
Sรฅ i exemplet nedan, om vรคrdet pรฅ variabeln 'TutorialName' รคr 'AngularJS', kommer utdata frรฅn uttrycket nedan att vara 'ANGULARJS'.
{{ TutorialName | uppercase }}
I det hรคr avsnittet kommer vi att titta nรคrmare pรฅ hur filtren orderBy och versaler kan anvรคndas i tabeller.
Vanliga AngularJS-filter som anvรคnds med tabeller
Tabellen nedan jรคmfรถr de filter som anvรคnds oftast i ett ng-repeat-uttryck.
| Filtrera | Syfte | Exempelvis |
|---|---|---|
| bestรคll efter | Sorterar rader efter en nyckel | | orderBy : 'Name' |
| filtrera | Behรฅller matchande rader | | filter : searchText |
| versaler | Storiserar texten | | uppercase |
| smรฅ bokstรคver | Sรคnker texten | | lowercase |
| grรคnsTill | Antal rader med versaler | | limitTo : 25 |
| valutan | Formaterar pengar | | currency : '$' |
| datum | Formaterar datum | | date : 'dd MMM yyyy' |
| antal | Stรคller in decimaler | | number : 2 |
Sortering รคr det filter som lรคsarna frรฅgar efter fรถrst, sรฅ orderBy-filtret kommer hรคrnรคst.
Sortera tabell med OrderBy-filter
Det hรคr filtret anvรคnds fรถr att sortera tabellen baserat pรฅ en av tabellkolumnerna. I fรถregรฅende exempel sรฅg utdata fรถr vรฅra AngularJS-tabelldata ut enligt nedan.
| controllers | Styrenheter i aktion |
| Modeller | Modeller och bindande data |
| instruktioner | Direktivens flexibilitet |
Lรฅt oss titta pรฅ ett exempel pรฅ hur vi kan anvรคnda filtret "orderBy" och sortera AngularJS-tabelldata med hjรคlp av den fรถrsta kolumnen i tabellen.
<!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 Fรถrklaring
- Vi anvรคnder samma kod som vi gjorde fรถr att skapa vรฅr tabell, den enda skillnaden den hรคr gรฅngen รคr att vi anvรคnder "orderBy"-filtret tillsammans med ng-repeat-direktivet. I det hรคr fallet sรคger vi att vi vill bestรคlla bordet med nyckeln "Namn".
Om koden exekveras framgรฅngsrikt kommer fรถljande utdata att visas nรคr du kรถr din kod i webblรคsaren.
Produktion
Frรฅn utgรฅngen,
- Vi kan se att informationen i AngularJS-tabellen har sorterats enligt informationen i den fรถrsta kolumnen. Arrayen deklareras i ordningen Controllers, Models, Directives, sรฅ utan filter visas raderna i den ordningen.
orderBy : 'Name'ordnar namnvรคrdena alfabetiskt, vilket flyttar direktiv fรถre modeller och producerar styrenheter, direktiv och modeller.
Sortera in Reverse och frรฅn kolumnrubriker
Filtret orderBy accepterar ett andra argument. Skicka true vรคnder riktningen, och om man lagrar bรฅde nyckeln och den flaggan pรฅ omfรฅnget kan en lรคsare sortera om tabellen genom att klicka pรฅ en rubrik, eftersom bestรคllMed referens beskriver.
<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>
Ordningen รคndrar radernas ordning. Nรคsta filter รคndrar hur en enskild kolumn lรคses.
Displaytabell med versalfilter
Vi kan ocksรฅ anvรคnda versalfiltret fรถr att รคndra data i AngularJS-tabellen till versaler.
Lรฅt oss ta en titt pรฅ ett exempel pรฅ hur vi kan uppnรฅ detta.
<!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 Fรถrklaring
- Vi anvรคnder samma kod som vi gjorde fรถr att skapa vรฅr tabell, den enda skillnaden den hรคr gรฅngen รคr att vi anvรคnder filtret med versaler. Vi anvรคnder detta filter tillsammans med "ptutor.Name" sรฅ att all text i den fรถrsta kolumnen kommer att visas med versaler.
Om koden exekveras framgรฅngsrikt kommer fรถljande utdata att visas nรคr du kรถr din kod i webblรคsaren.
Produktion
Frรฅn utgรฅngen,
- Vi kan se att genom att anvรคnda filtret "versaler" visas all data i den fรถrsta kolumnen med versaler.
Att formatera en kolumn รคr anvรคndbart, och lรคsare vill ofta ha ett radnummer bredvid den.
Visa tabellindexet ($index)
Fรถr att visa tabellindexet, lรคgg till en med $index.
Lรฅt oss ta en titt pรฅ ett exempel pรฅ hur vi kan uppnรฅ detta.
<!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 Fรถrklaring
- Vi anvรคnder samma kod som vi gjorde fรถr att skapa vรฅr tabell, den enda skillnaden den hรคr gรฅngen รคr att vi lรคgger till en extra rad i vรฅr tabell fรถr att visa indexkolumnen. I denna extra kolumn anvรคnder vi egenskapen "$index" tillhandahรฅlls av AngularJS och sedan anvรคnda +1-operatorn fรถr att รถka indexet fรถr varje rad.
Om koden exekveras framgรฅngsrikt kommer fรถljande utdata att visas nรคr du kรถr din kod i webblรคsaren.
Produktion
Frรฅn utgรฅngen,
- Du kan se att ytterligare en kolumn har skapats. I den hรคr kolumnen kan vi se vilka index som skapas fรถr varje rad.
Tre rader fรฅr plats pรฅ en skรคrm. En realistisk datamรคngd gรถr det inte, sรฅ lรคsarna behรถver ett sรคtt att sรถka i den.
Sรฅ hรคr filtrerar och sรถker du i AngularJS-tabelldata
AngularJS levererar ett filter med namnet filterPlacerad efter ng-repeat jรคmfรถr den varje element i arrayen med ett vรคrde och behรฅller endast de rader som matchar. Bind det vรคrdet till en textruta med ng-model och tabellen begrรคnsar sig sjรคlv medan lรคsaren skriver, utan hรคndelsehanterare och ingen kontrollkod.
Lรคgg till en livesรถkning Box
Lรคgg till en indata ovanfรถr tabellen och skicka arrayen genom filtret. De tvรฅ delar samma scope-egenskap, sรฅ AngularJS omvรคrderar uttrycket vid varje tangenttryckning.
<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 Fรถrklaring:
- Inmatningen skriver vad som รคn skrivs in
searchTextpรฅ omfattningen. filter : searchTextbehรฅller rader vars namn eller Description innehรฅller den delstrรคngen, utan att vรคxla mellan gemener och versaler.- Fรถr att sรถka i en enskild kolumn istรคllet, skicka ett objekt:
filter : {Name : searchText}. - Filterkedjan, sรฅ
| filter : searchText | orderBy : 'Name'sรถker fรถrst och sorterar sedan de รถverlevande.
Hรฅll stora bord responsiva
Ett vanligt problem som uppstรฅr under utveckling med AngularJS-tabeller รคr en stor datamรคngd som innehรฅller tusen rader eller fler. ng-upprepa Direktivet skapar ett scope och en watcher per rad, sรฅ att sidan kan sluta svara. Sprid ut raderna รถver sidorna istรคllet och lรคgg till track by sรฅ befintliga rader รฅteranvรคnds snarare รคn ombyggs.
<tr ng-repeat="ptutor in tutorial | filter : searchText | limitTo : 25 track by ptutor.Name">










