AngularJS ng-repeat -direktiivi esimerkin kanssa
โก รlykรคs yhteenveto
AngularJS:n ng-repeat-direktiivi renderรถi yhden kopion elementistรค jokaista ohjainalueella mรครคritellyn kokoelman alkiota kohden. Se muuntaa taulukon listaksi, taulukoksi tai miksi tahansa toistuvaksi merkinnรคksi ilman manuaalisen silmukan kirjoittamista.

ng-repeat-direktiivi AngularJS:ssรค
ng-toista Direktiivi AngularJS:ssรค kรคytetรครคn nรคyttรคmรครคn ohjaimessa mรครคriteltyjรค toistuvia arvoja. Joskus meidรคn on nรคytettรคvรค luettelo kohteista nรคkymรคssรค, ja ng-repeat renderรถi ohjaimessa mรครคritellyn luettelon nรคkymรคsivulle.
โ ๏ธ Tukitiedote: AngularJS saavutettu kรคyttรถiรคn pรครคttyessรค 31. joulukuuta 2021 eikรค saa enรครค korjauksia tai tietoturvakorjauksia. Alla oleva direktiivi pysyy paikkansa olemassa olevien AngularJS 1.x -sovellusten yllรคpidossa; nykyaikaisissa Kulma- vastaava on *ngFor rakenteellinen direktiivi.
Esimerkki AngularJS ng-repeat -direktiivistรค
Katsotaanpa esimerkkiรค ng-repeat-direktiivistรค AngularJS:ssรค:
<!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 Selitys:
- In ohjain, mรครคrittelemme ensin nรคkymรคssรค nรคytettรคvien listakohteiden taulukon. Tรคssรค taulukko nimeltรค
TopicNamessisรคltรครค kolme alkiota, joista jokainen on nimi-arvo-pari. - Taulukko on osoitettu suoraan
$scope.TopicNames, mikรค tekee sen saataville tรคhรคn ohjaimeen sidotulle nรคkymรคlle. - HTML-tagit
<ul>(jรคrjestรคmรคtรถn lista) ja<li>(luettelokohta) nรคyttรครค kohteet. ng-repeat-direktiivi kรคy lรคpi jokaisen taulukon merkinnรคn jatpnameon paikallinen muuttuja, joka sisรคltรครค nykyisen alkion, joten{{tpname.name}}tulostaa nimiominaisuuden.
โ ๏ธ Korjaus: alkuperรคisessรค selityksessรค todettiin, ettรค taulukko "lisรคttiin jรคsenmuuttujaan nimeltรค topics". Koodiin ei sisรคlly tรคllaista muuttujaa โ taulukkoon arvo annetaan suoraan $scope.TopicNames, joka on nimi, johon nรคkymรค viittaa. Toisen nimen lisรครคminen tรคhรคn on yleinen syy tyhjรครคn listaan.
Jos koodi suoritetaan onnistuneesti, selaimessa nรคkyy seuraava tuloste.
AngularJS useita ohjaimia
Aiemmin nรคimme yhden ohjaimen, jossa yksi metodi kรคsitteli sekรค yhteenlaskun ettรค osalaskuntracnumeroiden erottaminen. Voit sen sijaan kรคyttรครค useita ohjaimia logiikan erottamiseksi selkeรคmmin. Esimerkiksi yksi ohjain voi kรคsitellรค numeroita, kun taas toinen kรคsittelee merkkijonoja.
Katsotaanpa esimerkkiรค useiden ohjainten mรครคrittelystรค AngularJS-sovelluksessa.
<!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 Selitys:
- Kaksi ohjainta on mรครคritelty,
firstcontrollerjasecondcontrollerJokainen liittรครค muuttujan omaan laajuus:pnameensimmรคisessรค,lnametoisessa. - Nรคkymรคssรค toinen ohjain on ensimmรคisen sisรคllรค ja lauseke lukee
lnamesisemmรคstรค laajuusalueesta. Koska sisรคkkรคinen ohjain perii vanhemmalta,{{pname}}ratkeaisi myรถs tรคssรค โ perintรถ virtaa alaspรคin, ei koskaan ylรถspรคin.
Jos koodi suoritetaan onnistuneesti, teksti toinen ohjain nรคytetรครคn.
Kuinka kรคyttรครค track by ng-toistolla
Yleisin ng-toiston epรคonnistuminen on virhe Duplicates in a repeater are not allowedSe ilmestyy heti, kun kokoelma sisรคltรครค saman arvon kahdesti, ja se pysรคyttรครค listan renderรถinnin kokonaan.
Syynรค on identiteetti trackuningas. AngularJS tarvitsee vakaan avaimen jokaiselle alkiolle, jotta se voi kรคyttรครค DOM-solmuja uudelleen sen sijaan, ettรค se rakentaisi ne uudelleen jokaisella tiivisteellรค. Oletusarvoisesti se kรคyttรครค itse alkion arvoa, joten kaksi identtistรค arvoa tรถrmรครคvรคt.
<!-- 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>
Valinta nรคiden kahden muodon vรคlillรค on tรคrkeรคmpi kuin miltรค se ensi silmรคyksellรค nรคyttรครค. Tracking by $index ratkaisee aina virheen, koska sijainti on mรครคritelmรคn mukaan yksilรถllinen, mutta se sitoo jokaisen DOM-solmun paikkaan tietueen sijaan. Kokoelman uudelleenjรคrjestely tai suodattaminen kรคyttรครค sitten uudelleen vรครคriรค solmuja, jotka nรคkyvรคt syรถttรถkenttinรค, jotka sรคilyvรคtping edellisen rivin teksti.
Tracking aidolla tunnisteella, kuten topic.id vรคlttรครค sen kokonaan. AngularJS voi seurata kutakin tietuetta sen liikkuessa, joten se jรคrjestรครค olemassa olevat solmut uudelleen sen sijaan, ettรค se tuhoaisi ja rakentaisi ne uudelleen. Pitkillรค listoilla tรคmรค on myรถs huomattavasti nopeampaa, koska uudelleenrenderรถinti koskee vain rivejรค, jotka todella muuttuivat. Kรคytรค $index vain yksinkertaisten arvojen taulukoille, jotka eivรคt koskaan jรคrjesty uudelleen.
ng-repeat-funktion sisรคllรค kรคytettรคvissรค olevat erikoisominaisuudet
Jokainen ng-repeat-funktion iteraatio paljastaa useita vain luku -tilassa olevia ominaisuuksia omassa aliosiossa. Ne kuvaavat nykyisen alkion sijaintia kokoelmassa, mikรค kattaa numeroinnin, vuorottelevat tyylit ja erottimet lisรครคmรคttรค ohjaimeen mitรครคn ylimรครคrรคistรค tilaa.
| Omaisuus | Tyyppi | Arvo |
|---|---|---|
$index |
numero | Nykyisen kohteen sijainti alkaen kohdasta 0 |
$first |
boolean | Totta vain ensimmรคiselle esineelle |
$last |
boolean | Totta vain viimeiselle kohdalle |
$middle |
boolean | Totta jokaiselle esineelle, joka ei ole ensimmรคinen eikรค viimeinen |
$even |
boolean | Totta, kun $index on parillinen |
$odd |
boolean | Tosi, kun $index on pariton |
Tyypillinen kรคyttรถ yhdistรครค ne ng-luokan kanssa seepra-striisien tekemiseen.ping, kuten ng-class="{'row-alt': $odd}", tai ng-if-funktiolla erotinmerkin hahmontamiseksi jokaisella rivillรค paitsi viimeisellรค, kirjoitettuna ng-if="!$last"Ihmisen luettavan rivinumeron nรคyttรคminen on yksinkertaisesti {{$index + 1}}, koska indeksi on nollapohjainen. Kaikki kuusi ominaisuutta lasketaan automaattisesti uudelleen aina, kun kokoelma muuttuu, joten mitรครคn ei tarvitse laskea uudelleen kรคsin.
Yleisiรค ng-repeat-virheitรค ja niiden korjaaminen
Useimmat ng-toisto-ongelmat johtuvat kaksoisarvoista, laajuusperiytymisestรค tai vรครคrรคllรค elementillรค olevasta direktiivistรค. Jokainen alla oleva oire nimeรครค syynsรค.
- Toistimessa olevat kaksoiskappaleet eivรคt ole sallittuja: kokoelma sisรคltรครค toistuvan arvon. Lisรครค
track by $index, tai parempi,track byainutlaatuinen ominaisuus. - Lista ei anna mitรครคn selvรครค: nรคkymรคn nimi ei vastaa laajuusalueen ominaisuutta. Tulosta kokoelma kรคyttรคmรคllรค
{{TopicNames}}vahvistamaan sen saapumisen. - Jokainen elementti toistuu, mukaan lukien kรครคre: ng-repeat sijoitettiin sรคiliรถรถn eikรค esineeseen. Siirrรค se
<li>or<tr>. - Syรถtteen muokkaaminen muuttaa vรครคrรครค riviรค: lista on tracked by
$indexsamalla kun esineet jรคrjestyvรคt uudelleen. Track vakaan tunnisteen avulla. - Silmukan sisรคllรค olevat muutokset eivรคt sรคily: Jokaisella iteraatiolla on oma lapsilaajuus, joten primitiiviin kirjoittaminen luo paikallisen kopion. Kirjoita objektin ominaisuuteen, kuten
item.done.




