Tabel AngularJS: Sortare cu orderBy și filtru cu majuscule
⚡ Rezumat inteligent
Sortarea, ordonarea și formatarea textului în tabelele AngularJS se bazează pe directiva ng-repeat plus o expresie de filtrare. Această pagină arată cum orderBy, uppercase, filter și $index transformă un tabel HTML simplu într-o grilă dinamică, bazată pe date.
Tabelele sunt unul dintre elementele comune folosite în HTML atunci când lucrați cu pagini web.
Mesele în HTML sunt proiectate folosind eticheta HTML
- tag – Aceasta este eticheta principală utilizată pentru afișarea tabelului.
- – Această etichetă este folosită pentru a segrega rândurile din tabel.
- – Această etichetă este utilizată pentru afișarea datelor reale din tabel.
- – Acesta este utilizat pentru datele antetului tabelului.
Folosind etichetele HTML disponibile de mai sus împreună cu AngularJS, putem facilita completarea datelor din tabel. Pe scurt, directiva ng-repeat este folosită pentru a completa datele din tabel.
Vom analiza cum putem realiza acest lucru în cadrul acestui capitol. De asemenea, vom analiza cum putem utiliza filtrele orderBy și uppercase, împreună cu atributul $index, pentru a afișa indexurile tabelelor AngularJS. Primul pas este markup-ul în sine.
Populați și afișați datele într-un tabel
După cum am discutat în introducerea acestui capitol, baza pentru crearea structurii tabelului într-o pagină HTML rămâne aceeași.
Structura tabelului este încă creată folosind etichetele HTML normale ale , , și . Cu toate acestea, datele sunt populate folosind directiva ng-repeat în AngularJS.
Să vedem un exemplu simplu despre cum putem implementa tabele AngularJS.
În acest exemplu,
Vom crea un tabel AngularJS care va conține subiecte de curs împreună cu descrierile lor.
Pas 1) Mai întâi vom adăuga o etichetă „stil” la pagina noastră HTML, astfel încât tabelul să poată fi afișat ca un tabel adecvat.
- Eticheta de stil este adăugată în pagina HTML. Aceasta este modalitatea standard de a adăuga orice atribute de formatare care sunt necesare pentru elementele HTML.
- Adăugăm două valori de stil la tabelul nostru.
- Una este că ar trebui să existe o bordură solidă pentru tabelul nostru AngularJS și
- În al doilea rând, ar trebui să existe o zonă de umplere (padding) pentru datele din tabelul nostru AngularJS.
Pas 2) Următorul pas este să scrieți codul pentru a genera tabelul și datele acestuia.
<!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>
⚠️ Atenție: Această listă este reprodusă exact așa cum a fost publicată, iar patru rânduri din ea sunt greșite. chrset greșeli de ortografie charsetTrei build-uri AngularJS se încarcă simultan, ceea ce este cu una prea mult. lib/bootstrap.js și lib/bootstrap.css nu există. Păstrează angular.min.js numai.
Code Explicație
- Mai întâi creăm o variabilă numită „tutorial” și îi atribuim câteva perechi cheie-valoare într-un singur pas. Fiecare pereche cheie-valoare va fi folosită ca date la afișarea tabelului. Variabila tutorial este apoi atribuită obiectului scope, astfel încât să poată fi accesată din vizualizarea noastră.
- Acesta este primul pas în crearea unui tabel și folosim etichetă.
- Pentru fiecare rând de date, folosim „directiva ng-repeat”. Această directivă parcurge fiecare pereche cheie-valoare din obiectul domeniului tutorial folosind variabila ptutor.
- În cele din urmă, folosim eticheta împreună cu perechile cheie-valoare (ptutor.Name și ptutor.Description) pentru a afișa datele din tabelul AngularJS.
Dacă codul este executat cu succes, următoarea ieșire va fi afișată atunci când rulați codul în browser.
producție
Din rezultatul de mai sus,
- Putem vedea că tabelul este afișat corect cu datele din matricea de perechi cheie-valoare definite în controler.
- Datele din tabel au fost generate prin parcurgerea fiecărei perechi cheie-valoare utilizând „directiva ng-repeat”.
Rândurile brute sunt doar punctul de plecare, deoarece filtrele decid modul în care sunt ordonate și formatate aceste rânduri.
Filtru încorporat AngularJS
Este foarte obișnuit să folosiți filtrele încorporate în AngularJS pentru a schimba modul în care datele sunt afișate în tabele. Am văzut deja filtrele în acțiune într-un capitol anterior. Să facem o recapitulare rapidă a filtrelor înainte de a continua.
În AngularJS, filtrele sunt folosite pentru a formata valoarea expresiei înainte de a fi afișată utilizatorului. Un exemplu de filtru este filtrul „uppercase” (caiet de caractere), care preia un șir de caractere de ieșire, formatează șirul și afișează toate caracterele din șir cu majuscule.
Deci, în exemplul de mai jos, dacă valoarea variabilei „TutorialName” este „AngularJS”, rezultatul expresiei de mai jos va fi „ANGULARJS”.
{{ TutorialName | uppercase }}
În această secțiune, ne vom uita la modul în care filtrele orderBy și majuscule pot fi utilizate în tabele mai detaliat.
Filtre AngularJS comune utilizate cu tabele
Tabelul de mai jos compară filtrele utilizate cel mai des în cadrul unei expresii ng-repeat.
| Filtru | Scop | Exemplu |
|---|---|---|
| comandăDupă | Sortează rândurile după o cheie | | orderBy : 'Name' |
| filtru | Păstrează rândurile corespondente | | filter : searchText |
| majuscule | Textul se scrie cu majusculă | | uppercase |
| litere mici | Coboară textul | | lowercase |
| limităLa | Numărul de rânduri cu majuscule | | limitTo : 25 |
| valută | Formatează banii | | currency : '$' |
| data | Formatează datele | | date : 'dd MMM yyyy' |
| număr | Setează zecimale | | number : 2 |
Sortarea este primul filtru pe care cititorii îl solicită, așa că filtrul orderBy vine următorul.
Sortați tabelul cu filtrul OrderBy
Acest filtru este utilizat pentru a sorta tabelul în funcție de una dintre coloanele tabelului. În exemplul anterior, rezultatul pentru datele tabelului nostru AngularJS a apărut așa cum se arată mai jos.
| Controlere | Controlorii în acțiune |
| modele | Modele și date obligatorii |
| Directivele | Flexibilitatea directivelor |
Să luăm un exemplu despre cum putem folosi filtrul „orderBy” și sorta datele din tabelul AngularJS folosind prima coloană din tabel.
<!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 Explicație
- Folosim același cod ca și pentru crearea tabelului nostru, singura diferență de această dată este că folosim filtrul „orderBy” împreună cu directiva ng-repeat. În acest caz, spunem că vrem să ordonăm tabelul după cheia „Nume”.
Dacă codul este executat cu succes, următoarea ieșire va fi afișată atunci când rulați codul în browser.
producție
Din ieșire,
- Putem vedea că datele din tabelul AngularJS au fost sortate conform datelor din prima coloană. Matricea este declarată în ordinea Controllere, Modele, Directive, deci fără un filtru rândurile apar în această ordine. Aplicarea
orderBy : 'Name'aranjează valorile Name în ordine alfabetică, ceea ce mută Directivele înaintea Modelelor și produce Controlere, Directive, Modele.
Sortați Reverse și din anteturile coloanelor
Filtrul orderBy acceptă un al doilea argument. Transmiterea true inversează direcția, iar stocarea atât a cheii, cât și a acelui indicator pe osciloscop permite unui cititor să resorteze tabelul făcând clic pe un antet, deoarece comandăPrin referință descrie.
<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>
Ordonarea modifică secvența rândurilor. Următorul filtru modifică modul în care se citește o singură coloană.
Afișează tabel cu filtru majuscule
De asemenea, putem folosi filtrul cu majuscule pentru a schimba datele din tabelul AngularJS în majuscule.
Să aruncăm o privire la un exemplu despre cum putem realiza acest lucru.
<!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 Explicație
- Folosim același cod ca și pentru crearea tabelului nostru, singura diferență de această dată este că folosim filtrul majuscule. Folosim acest filtru împreună cu „ptutor.Name”, astfel încât tot textul din prima coloană să fie afișat cu majuscule.
Dacă codul este executat cu succes, următoarea ieșire va fi afișată atunci când rulați codul în browser.
producție
Din ieșire,
- Putem vedea că, folosind filtrul „majuscule”, toate datele din prima coloană sunt afișate cu caractere majuscule.
Formatarea unei coloane este utilă, iar cititorii doresc adesea un număr de rând lângă ea.
Afișați indexul tabelului ($index)
Pentru a afișa indexul tabelului, adăugați a cu $index.
Să aruncăm o privire la un exemplu despre cum putem realiza acest lucru.
<!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 Explicație
- Folosim același cod ca și pentru crearea tabelului nostru, singura diferență de această dată este că adăugăm un rând suplimentar la tabelul nostru pentru a afișa coloana index. În această coloană suplimentară, folosim proprietatea „$index”. furnizate de AngularJS și apoi folosind operatorul +1 pentru a incrementa indexul pentru fiecare rând.
Dacă codul este executat cu succes, următoarea ieșire va fi afișată atunci când rulați codul în browser.
producție
Din ieșire,
- Puteți vedea că a fost creată o coloană suplimentară. În această coloană, putem vedea indecșii creați pentru fiecare rând.
Trei rânduri încap pe un singur ecran. Un set de date realist nu încape, așa că cititorii au nevoie de o modalitate de a căuta în el.
Cum se filtrează și se caută datele din tabelul AngularJS
AngularJS livrează un filtru numit filterPlasat după ng-repeat, acesta compară fiecare element din matrice cu o valoare și păstrează doar rândurile care se potrivesc. Legați acea valoare la o casetă de text cu ng-model și tabelul se restrânge în timp ce cititorul tastează, fără un handler de tratare a evenimentelor și fără cod de controler.
Adăugați o căutare live Box
Adăugați o intrare deasupra tabelului și transmiteți matricea prin filtru. Cele două au aceeași proprietate scope, așa că AngularJS reevaluează expresia la fiecare apăsare de tastă.
<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 Explicaţie:
- Intrarea scrie orice este tastat în
searchTextasupra domeniului de aplicare. filter : searchTextpăstrează rândurile al căror nume sau Description conține acel subșir, ignorând majusculele/minusculele.- Pentru a căuta într-o singură coloană, transmiteți un obiect:
filter : {Name : searchText}. - Lanțul de filtre, deci
| filter : searchText | orderBy : 'Name'caută mai întâi și apoi sortează supraviețuitorii.
Mențineți tabelele mari responsive
O problemă frecventă întâlnită în timpul dezvoltării tabelelor AngularJS este un set de date mare care conține o mie sau mai multe rânduri. ng-repetă Directiva creează un domeniu de aplicare și un observator pe rând, astfel încât pagina să nu mai răspundă. Împărțiți rândurile pe pagini și adăugați track by astfel încât rândurile existente sunt reutilizate în loc să fie reconstruite.
<tr ng-repeat="ptutor in tutorial | filter : searchText | limitTo : 25 track by ptutor.Name">










