AngularJS ng-gentag direktiv med eksempel
โก Smart opsummering
Direktivet ng-repeat i AngularJS gengiver รฉn kopi af et element for hvert element i en samling, der er defineret i controllerens scope. Det omdanner et array til en liste, en tabel eller enhver gentagen markup uden at skrive et manuelt loop.

ng-gentagelsesdirektiv i AngularJS
ng-gentag Direktiv I AngularJS bruges til at vise gentagne vรฆrdier defineret i controlleren. Nogle gange har vi brug for at vise en liste over elementer i viewet, og ng-repeat gengiver en liste defineret i controlleren pรฅ en view-side.
โ ๏ธ Supportmeddelelse: AngularJS nรฅet levetidens afslutning den 31. december 2021 og modtager ingen yderligere programrettelser eller sikkerhedsrettelser. Direktivet nedenfor forbliver korrekt til vedligeholdelse af eksisterende AngularJS 1.x-applikationer; i moderne Vinkelforskydning det tilsvarende er *ngFor strukturdirektiv.
AngularJS ng-gentagelsesdirektiv eksempel
Lad os se pรฅ et eksempel pรฅ ng-repeat-direktivet i AngularJS:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Event Registration</title> </head> <body> <h1>Guru99 Global Event</h1> <script src="https://code.angularjs.org/1.8.3/angular.js"></script> <div ng-app="DemoApp" ng-controller="DemoController"> <h1>Topics</h1> <ul> <li ng-repeat="tpname in TopicNames"> {{tpname.name}} </li> </ul> </div> <script> var app = angular.module('DemoApp', []); app.controller('DemoController', function($scope) { $scope.TopicNames = [ { name: "What controllers do from Angular's perspective" }, { name: "Controller Methods" }, { name: "Building a basic controller" } ]; }); </script> </body> </html>
Code Forklaring:
- I controller, definerer vi fรธrst det array af listeelementer, der skal vises i visningen. Her et array kaldet
TopicNamesindeholder tre elementer, der hver er et navn-vรฆrdi-par. - Arrayet er direkte tildelt
$scope.TopicNames, hvilket gรธr den tilgรฆngelig for den visning, der er bundet til denne controller. - HTML-tags
<ul>(uordnet liste) og<li>(listeelement) viser elementerne. ng-repeat-direktivet gentager hver indgang i arrayet, ogtpnameer den lokale variabel, der indeholder det aktuelle element, sรฅ{{tpname.name}}udskriver dens navneegenskab.
โ ๏ธ Rettelse: Den oprindelige forklaring angav, at arrayet blev "tilfรธjet til en medlemsvariabel kaldet topics". En sรฅdan variabel findes ikke i koden โ arrayet tildeles direkte til $scope.TopicNames, som er det navn, som visningen refererer til. At introducere et andet navn her er en almindelig รฅrsag til en tom liste.
Hvis koden udfรธres korrekt, vises fรธlgende output i browseren.
AngularJS Multiple Controllere
Tidligere sรฅ vi en enkelt controller, hvor รฉn metode hรฅndterede bรฅde addition og subtraction af tal. Du kan i stedet bruge flere controllere til at adskille logikken mere tydeligt. For eksempel kan รฉn controller arbejde pรฅ tal, mens en anden arbejder pรฅ strenge.
Lad os se pรฅ et eksempel pรฅ definition af flere controllere i en AngularJS-applikation.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Event Registration</title> </head> <body> <h1>Guru99 Global Event</h1> <script src="https://code.angularjs.org/1.8.3/angular.js"></script> <div ng-app="DemoApp"> <div ng-controller="firstcontroller"> <div ng-controller="secondcontroller"> {{lname}} </div> </div> </div> <script> var app = angular.module('DemoApp', []); app.controller('firstcontroller', function($scope) { $scope.pname = "firstcontroller"; }); app.controller('secondcontroller', function($scope) { $scope.lname = "secondcontroller"; }); </script> </body> </html>
Code Forklaring:
- To controllere er defineret,
firstcontrollerogsecondcontrollerHver tilknytter en variabel til sin egen rรฆkkevidde:pnamei den fรธrste,lnamei det andet. - I visningen er den anden controller indlejret i den fรธrste, og udtrykket lรฆses
lnamefra det indre scope. Fordi en indlejret controller arver fra sin overordnede,{{pname}}ville ogsรฅ lรธses her โ arv flyder nedad, aldrig opad.
Hvis koden udfรธres korrekt, vil teksten andencontroller vises.
Sรฅdan bruges den: track ved med ng-gentagelse
Den mest almindelige ng-repeat-fejl er fejlen Duplicates in a repeater are not allowedDet ser ud til, at i det รธjeblik en samling indeholder den samme vรฆrdi to gange, stopper det gengivelsen af โโlisten helt.
ร rsagen er identitet trackonge. AngularJS har brug for en stabil nรธgle til hvert element, sรฅ det kan genbruge DOM-noder i stedet for at genopbygge dem ved hver digest. Som standard bruger det selve elementvรฆrdien, sรฅ to identiske vรฆrdier kolliderer.
<!-- Fails: the value 2 appears twice --> <li ng-repeat="n in [1, 2, 2, 3]">{{n}}</li> <!-- Works: position is unique even when values repeat --> <li ng-repeat="n in [1, 2, 2, 3] track by $index">{{n}}</li> <!-- Bedste for records from a server: track by a real identifier --> <li ng-repeat="topic in TopicNames track by topic.id">{{topic.name}}</li>
At vรฆlge mellem de to former er vigtigere end det umiddelbart ser ud til. Tracking by $index lรธser altid fejlen, fordi en position per definition er unik, men den binder hver DOM-node til et slot i stedet for til en post. Omarrangering eller filtrering af samlingen genbruger derefter de forkerte noder, hvilket vises som inputfelter, der ikke lรฆngere er tilgรฆngelige.ping den forrige rรฆkkes tekst.
Tracking ved hjรฆlp af en รฆgte identifikator, sรฅsom topic.id undgรฅr det helt. AngularJS kan fรธlge hver post, mens den bevรฆger sig, sรฅ den omarrangerer eksisterende noder i stedet for at รธdelรฆgge og genopbygge dem. Pรฅ lange lister er dette ogsรฅ markant hurtigere, da en gengivelse kun berรธrer de rรฆkker, der faktisk รฆndrede sig. Brug $index kun for arrays af almindelige vรฆrdier, der aldrig omarrangerer.
Sรฆrlige egenskaber tilgรฆngelige inde i ng-repeat
Hver iteration af ng-repeat eksponerer adskillige skrivebeskyttede egenskaber pรฅ sit eget underordnede scope. De beskriver, hvor det aktuelle element befinder sig i samlingen, hvilket dรฆkker nummerering, alternerende stilarter og separatorer uden at tilfรธje nogen ekstra tilstand til controlleren.
| Ejendom | Type | Vรฆrdi |
|---|---|---|
$index |
nummer | Placering af det aktuelle element, startende ved 0 |
$first |
Boolesk | Kun sandt for den fรธrste vare |
$last |
Boolesk | Kun sandt for den sidste vare |
$middle |
Boolesk | Sandt for alle elementer, der hverken er fรธrst eller sidst |
$even |
Boolesk | Sandt nรฅr $index er lige |
$odd |
Boolesk | Sandt nรฅr $index er ulige |
En typisk anvendelse kombinerer dem med ng-klassen til zebrastriberping, som i ng-class="{'row-alt': $odd}", eller med ng-if for at gengive en separator pรฅ hver rรฆkke undtagen den sidste, skrevet ng-if="!$last"Det er simpelthen at vise et rรฆkkenummer, der kan lรฆses af mennesker {{$index + 1}}, da indekset er nulbaseret. Alle seks egenskaber genberegnes automatisk, nรฅr samlingen รฆndres, sรฅ intet behรธver at genberegnes manuelt.
Almindelige ng-repeat-fejl og hvordan man retter dem
De fleste ng-repeat-problemer stammer fra duplikerede vรฆrdier, fra arv af scope eller fra direktivet, der sidder pรฅ det forkerte element. Hvert symptom nedenfor angiver dets รฅrsag.
- Dubletter i en repeater er ikke tilladt: Samlingen indeholder en gentaget vรฆrdi. Tilfรธj
track by $index, eller bedre,track byen unik ejendom. - Listen viser ingenting: Navnet i visningen matcher ikke egenskaben pรฅ omfanget. Udskriv samlingen med
{{TopicNames}}for at bekrรฆfte, at den er ankommet. - Hvert element gentages, inklusive wrapperen: ng-repeat blev placeret pรฅ beholderen i stedet for pรฅ varen. Flyt den til
<li>or<tr>. - Redigering af et input รฆndrer den forkerte rรฆkke: listen er trackรธd af
$indexmens varer genbestilles. Track af en stabil identifikator i stedet. - รndringer i lรธkken bevares ikke: Hver iteration har sit eget underordnede scope, sรฅ skrivning til en primitiv opretter en lokal kopi. Skriv til en objektegenskab, sรฅsom
item.done.




