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.

  • ๐Ÿงฑ Strukturera: Taggarna table, tr, td och th bygger fortfarande rutnรคtet, sรฅ ingen AngularJS-specifik markup ersรคtter standard HTML.
  • ๐Ÿ” Befolkning: Direktivet ng-repeat leder en array pรฅ scope-objektet och genererar en rad fรถr varje objekt den hittar.
  • โ†•๏ธ Bestรคllning: Filtret orderBy sorterar rader efter valfri nyckel, och en omvรคnd flagga vรคnder riktningen pรฅ begรคran.
  • ๐Ÿ”ค Formatering: Filtret fรถr versaler skriver ut en enskild kolumn med versaler utan att รคndra underliggande data i kontrollenheten.
  • ๐Ÿ”Ž Sรถkande: Filterfiltret som รคr bundet till en ng-modellindata begrรคnsar synliga rader nรคr lรคsaren skriver.
  • ๐Ÿ”ข Numrering: Egenskapen $index tillhandahรฅller en nollbaserad rรคknare, sรฅ att lรคgga till ett ger ett lรคsbart radnummer.
  • ๐Ÿš€ Skala: Utรถver tusen rader, para ihop limitTo med paginering och track av fรถr att hรฅlla sidan responsiv.

AngularJS-tabell

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

  1. tagg โ€“ Detta รคr huvudtaggen som anvรคnds fรถr att visa tabellen.
  2. โ€“ Den hรคr taggen anvรคnds fรถr att separera raderna i tabellen.
  3. โ€“ Denna tagg anvรคnds fรถr att visa den faktiska tabelldatan.
  4. โ€“ 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.

Fyll i och visa data i en tabell

  1. Stiltaggen lรคggs till pรฅ HTML-sidan. Detta รคr standardsรคttet att lรคgga till alla formateringsattribut som krรคvs fรถr HTML-element.
  2. 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.

Fyll i och visa data i en tabell

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

  1. 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.
  2. Detta รคr det fรถrsta steget i att skapa en tabell, och vi anvรคnder mรคrka.
  3. 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.
  4. 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

Fyll i och visa data i en tabell

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.

Sortera tabell med OrderBy-filter

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

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

Sortera tabell med OrderBy-filter

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.

Displaytabell med versalfilter

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

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

Displaytabell med versalfilter

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.

Visa tabellindex

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

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

Visa tabellindex

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:

  1. Inmatningen skriver vad som รคn skrivs in searchText pรฅ omfattningen.
  2. filter : searchText behรฅller rader vars namn eller Description innehรฅller den delstrรคngen, utan att vรคxla mellan gemener och versaler.
  3. Fรถr att sรถka i en enskild kolumn istรคllet, skicka ett objekt: filter : {Name : searchText}.
  4. 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">

Vanliga frรฅgor

ng-repeat behรถver en unik nyckel fรถr varje rad. Tvรฅ identiska vรคrden ger upphov till dupliceringsfelet. Lรคgg till en distinkt egenskap, eller skriv track av $index sรฅ radens position blir nyckeln istรคllet fรถr dess vรคrde.

Ja. Skicka en array med nycklar, till exempel orderBy: ['Namn','DescriptAngularJS sorterar pรฅ den fรถrsta nyckeln och bryter sedan kopplingarna till den andra. Prefixet fรถr en nyckel รคr ett minustecken fรถr att reversera den nyckeln.

Varje ng-repeat-rad exponerar booleska vรคrden $even och $odd. Bind en av dem med ng-class eller ng-if fรถr att tillรคmpa en bakgrundsfรคrg, vilket producerar randiga rader utan nรฅgon extra CSS-vรคljare i tabellen.

Assistenter som t.ex. GitHub Copilot scaffold ng-repeat-markup snabbt, men de uppfinner fortfarande skriptsรถkvรคgar och stavar fel attribut. Verifiera varje fรถrslag mot AngularJS-filterreferens fรถre fartygetping.

AI-verktyg skriver om ng-repeat som ett kontrollflรถdesblock och flyttar filter till rรถr eller signaler. Eftersom Vinkel har ingen inbyggd orderBy eller filterpipe, granska varje genererad sortering och sรถk manuellt.

Sammanfatta detta inlรคgg med: