AngularJS ng-upprepa direktiv med exempel
โก Smart sammanfattning
Direktivet ng-repeat i AngularJS renderar en kopia av ett element fรถr varje objekt i en samling som definierats i controllerns scope. Det omvandlar en array till en lista, en tabell eller nรฅgon repeterande markup utan att skriva en manuell loop.

ng-repetera direktivet i AngularJS
Ocuco-landskapet ng-upprepa Direktiven I AngularJS anvรคnds fรถr att visa upprepade vรคrden som definierats i kontrollenheten. Ibland behรถver vi visa en lista med objekt i vyn, och ng-repeat renderar en lista som definierats i kontrollenheten pรฅ en vysida.
โ ๏ธ Supportmeddelande: AngularJS nรฅdde slut pรฅ livscykeln den 31 december 2021 och fรฅr inga ytterligare patchar eller sรคkerhetsfixar. Direktivet nedan fรถrblir korrekt fรถr underhรฅll av befintliga AngularJS 1.x-applikationer; i moderna Vinkel motsvarigheten รคr *ngFor strukturdirektiv.
AngularJS ng-repeat direktiv Exempel
Lรฅt oss titta pรฅ ett exempel 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 Fรถrklaring:
- I styrenhet, definierar vi fรถrst arrayen med listobjekt som ska visas i vyn. Hรคr en array som heter
TopicNamesinnehรฅller tre objekt, vart och ett ett namn-vรคrde-par. - Matrisen รคr direkt tilldelad
$scope.TopicNames, vilket gรถr den tillgรคnglig fรถr vyn som รคr bunden till den hรคr kontrollanten. - HTML-taggarna
<ul>(oordnad lista) och<li>(listobjekt) visar objekten. Direktivet ng-repeat itererar รถver varje post i arrayen, ochtpnameรคr den lokala variabeln som innehรฅller det aktuella objektet, sรฅ{{tpname.name}}skriver ut dess namnegenskap.
โ ๏ธ Rรคttelse: Den ursprungliga fรถrklaringen angav att arrayen "lades till en medlemsvariabel som heter topics". Ingen sรฅdan variabel finns i koden โ arrayen tilldelas direkt till $scope.TopicNames, vilket รคr namnet som vyn refererar till. Att introducera ett andra namn hรคr รคr en vanlig orsak till en tom lista.
Om koden kรถrs korrekt visas fรถljande utdata i webblรคsaren.
AngularJS Multiple Controllers
Tidigare sรฅg vi en enda regulator dรคr en metod hanterade bรฅde addition och subtraction av tal. Du kan istรคllet anvรคnda flera styrenheter fรถr att separera logiken tydligare. Till exempel kan en styrenhet arbeta med tal medan en annan arbetar med strรคngar.
Lรฅt oss titta pรฅ ett exempel pรฅ hur man definierar flera kontroller 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 Fรถrklaring:
- Tvรฅ styrenheter รคr definierade,
firstcontrollerochsecondcontrollerVarje kopplar en variabel till sin egen omfattning:pnamei det fรถrsta,lnamepรฅ sekunden. - I vyn รคr den andra kontrollanten kapslad inuti den fรถrsta, och uttrycket lรคser
lnamefrรฅn det inre omfรฅnget. Eftersom en kapslad kontroller รคrver frรฅn sin fรถrรคlder,{{pname}}skulle ocksรฅ lรถsas hรคr โ arvet flyter nedรฅt, aldrig uppรฅt.
Om koden kรถrs korrekt, visas texten andrakontroller visas.
Sรฅ hรคr anvรคnder du track av med ng-upprepning
Det enskilt vanligaste ng-repeat-felet รคr felet Duplicates in a repeater are not allowedDet verkar som att i det รถgonblick en samling innehรฅller samma vรคrde tvรฅ gรฅnger, och det stoppar listrenderingen helt.
Orsaken รคr identitet trackung. AngularJS behรถver en stabil nyckel fรถr varje objekt sรฅ att den kan รฅteranvรคnda DOM-noder istรคllet fรถr att bygga om dem vid varje sammandrag. Som standard anvรคnder den sjรคlva objektvรคrdet, sรฅ tvรฅ identiska vรคrden kolliderar.
<!-- 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> <!-- Best for records from a server: track by a real identifier --> <li ng-repeat="topic in TopicNames track by topic.id">{{topic.name}}</li>
Att vรคlja mellan de tvรฅ formerna รคr viktigare รคn det fรถrst verkar. Tracking by $index lรถser alltid felet, eftersom en position per definition รคr unik, men den kopplar varje DOM-nod till en plats snarare รคn till en post. Om du รคndrar ordning eller filtrerar samlingen รฅteranvรคnds fel noder, vilket visas som inmatningsfรคlt keeping fรถregรฅende rads text.
Tracking med en รคkta identifierare, sรฅsom topic.id undviker det helt. AngularJS kan fรถlja varje post nรคr den flyttas, sรฅ den ordnar om befintliga noder istรคllet fรถr att fรถrstรถra och bygga om dem. Pรฅ lรฅnga listor รคr detta ocksรฅ markant snabbare, eftersom en omrendering bara berรถr de rader som faktiskt รคndrades. $index endast fรถr arrayer med vanliga vรคrden som aldrig รคndrar ordning.
Specialegenskaper tillgรคngliga inuti ng-repeat
Varje iteration av ng-repeat exponerar flera skrivskyddade egenskaper pรฅ sitt eget underordnade omfรฅng. De beskriver var det aktuella objektet finns inom samlingen, vilket tรคcker numrering, alternerande stilar och avgrรคnsare utan att lรคgga till nรฅgot extra tillstรฅnd till kontrollenheten.
| Fast egendom | Typ | Vรคrderar |
|---|---|---|
$index |
Antal | Position fรถr aktuellt objekt, med bรถrjan vid 0 |
$first |
Boolean | Sant endast fรถr den fรถrsta punkten |
$last |
Boolean | Sant endast fรถr den sista punkten |
$middle |
Boolean | Sant fรถr varje objekt som varken รคr fรถrst eller sist |
$even |
Boolean | Sant nรคr $index รคr jรคmnt |
$odd |
Boolean | Sant nรคr $index รคr udda |
En typisk anvรคndning kombinerar dem med ng-klass fรถr zebrastrimmorping, som i ng-class="{'row-alt': $odd}", eller med ng-if fรถr att rendera en avgrรคnsare pรฅ varje rad utom den sista, skriven ng-if="!$last"Att visa ett lรคsbart radnummer รคr helt enkelt {{$index + 1}}, eftersom indexet รคr nollbaserat. Alla sex egenskaper berรคknas om automatiskt nรคr samlingen รคndras, sรฅ ingenting behรถver berรคknas om manuellt.
Vanliga ng-repeat-fel och hur man รฅtgรคrdar dem
De flesta ng-repeat-problem uppstรฅr pรฅ grund av duplicerade vรคrden, frรฅn arv av scope eller frรฅn att direktivet sitter pรฅ fel element. Varje symptom nedan anger dess orsak.
- Dubbletter i en repeater รคr inte tillรฅtna: samlingen har ett upprepat vรคrde. Lรคgg till
track by $index, eller bรคttre,track byen unik egendom. - Listan visar ingenting: Namnet i vyn matchar inte egenskapen pรฅ omfรฅnget. Skriv ut samlingen med
{{TopicNames}}fรถr att bekrรคfta att den anlรคnt. - Varje element upprepas, inklusive omslaget: ng-repeat placerades pรฅ behรฅllaren istรคllet fรถr pรฅ objektet. Flytta den till
<li>or<tr>. - Att redigera en inmatning รคndrar fel rad: listan รคr tracked av
$indexmedan varorna ombestรคlls. Track med en stabil identifierare istรคllet. - รndringar inom loopen behรฅlls inte: varje iteration har sitt eget underordnade omfรฅng, sรฅ att skriva till en primitiv skapar en lokal kopia. Skriv till en objektegenskap, till exempel
item.done.




