2014-11-04 13 views
38

Potrzebuję drugi $ index dla mojej zagnieżdżonej pętli ng-repeat. Jak i gdzie powinienem to umieścić?

AngularJS site mówi

Tworzenie aliasów dla tych właściwości jest możliwe ngInit. Ten może być przydatny, gdy na przykład zagnieżdżanie ngRepeats.

<div ng-repeat="person in persons track by $index"> 
    <div ng-repeat="something in array track by $index2"> <!-- where to init this and how to manage it?--> 

Jeśli ponownie użyć $ index, wydaje się działać, ale nie jestem pewien, że to jest słuszne? Jestem pewien, że jest to łatwy i poprawny sposób, po prostu nie mogłem znaleźć przykładu.

Dzięki

Odpowiedz

109

$index skieruje do indeksu na najgłębszej ngRepeat zakresie, więc jeśli to, co trzeba, można po prostu używać.

Dokumenty opisujące to scenariusz, w którym należy uzyskać dostęp do $index w obiekcie nadrzędnym ngRepeat. Możesz to zrobić na kilka sposobów: Jednym jest użycie $parent, a innym jest użycie ngInit, zgodnie z sugestiami Angular. Oto przykład ...

<li ng-repeat="thing in things" ng-init="parentIndex = $index"> 
    {{ $index }} 
    <ul> 
     <li ng-repeat="value in thing.values"> 
      {{ value }} 
      {{ $index }} <!-- inner $index --> 
      {{ $parent.$index }} <!-- parent $index --> 
      {{ parentIndex }} <!-- also parent $index --> 
     </li> 
    </ul> 
</li> 

Fiddle

+0

Dokładnie to, co chciałem wiedzieć. Był nieco zdezorientowany z dokumentami. Dziękujemy – trainoasis

+0

Warto zauważyć, że działa dla dowolnego obiektu javascript dostępnego. Użyłem go do stworzenia aliasu dla zewnętrznych pętli $ last boolean, aby był dostępny w wewnętrznej pętli. – Skurpi

+2

Bardzo bardzo ostrożnie z tym podejściem, jeśli zamierzasz usunąć z listy elementy listy później. Na przykład, jeśli usuniesz wszystkie elementy tablicy z tablicy 'rzeczy', wówczas indeks $ zaktualizuje się, aby odzwierciedlić nowy stan tablicy, ale' parentIndex' nadal będzie wskazywał na indeks usuniętego elementu. Będzie to ogromny problem, jeśli chodzi o usuwanie. "ParentIndex" będzie poprawnie odzwierciedlał po zapisaniu stanu i odświeżeniu strony, tj. Musisz ponownie wyświetlić listę tablic w celu wyświetlenia zaktualizowanych indeksów. Pomyślałem to po zmaganiach z nim przez 3 dni. – Devner

Powiązane problemy