Chcę użyć indeksu listy nadrzędnej (foos) jako argumentu wywołania funkcji na liście podrzędnej (foos.bars).
Znalazłem post, w którym ktoś zaleca użycie $ parent. $ Index, ale $index
nie jest własnością $parent
.
Jak mogę uzyskać dostęp do indeksu rodzica ng-repeat
?
<div ng-repeat="f in foos">
<div>
<div ng-repeat="b in foos.bars">
<a ng-click="addSomething($parent.$index)">Add Something</a>
</div>
</div>
</div>
javascript
angularjs
angularjs-ng-repeat
Koder 1
źródło
źródło
Odpowiedzi:
Mój przykładowy kod był poprawny, a problemem był inny kod. Wiem jednak, że trudno było znaleźć przykłady tego, więc odpowiadam na wypadek, gdyby ktoś inny szukał.
źródło
ng-if
kod, jak właśnie się dowiedziałem.ng-if
wymaga dodatkowych$parent
informacji. Uratowało mnie trochę bólu głowy.Zgodnie z dokumentami ng-repeat http://docs.angularjs.org/api/ng.directive:ng Powtórz , możesz przechowywać indeks klucza lub tablicy w wybranej zmiennej.
(indexVar, valueVar) in values
więc możesz pisać
Jeden poziom wyżej jest wciąż całkiem czysty z $ parent. $ Index, ale kilku rodziców w górę, sprawy mogą się popsuć.
Uwaga:
$index
będzie nadal definiowany w każdym zakresie, nie jest zastępowany przezfIndex
.źródło
$parent.$index
jednym(fIndex, f)
metody $ index będzie nadal zdefiniowany (nie pominięty) - więc indeks staje się dostępny zarówno jako, jak$index
ifIndex
.$index
nie działa, ale dodawaniefIndex
działa. Nie mam pojęcia, dlaczego$index
nie działa (działa w innych miejscach mojego kodu), ale po kilku dniach zmagania przestałem się przejmować, gdy znalazłem tę odpowiedź. Jest również nieco bardziej czytelny, gdy masz wieleng-repeat
IMO.ng-repeat
iteracja tworzy własny zakres, który również definiuje własny zakres$index
, zastępując zakres rodzica$index
. Jeśli umieścisz{{$index}}
prawo powyżej lub poniżej najbardziej wewnętrznegong-repeat
elementu, zobaczysz wartość rodzica, a umieszczenie go wewnątrz najbardziej wewnętrznegong-repeat
elementu pokaże ci dziecko. Użycie podejścia z tej odpowiedzi po prostu przypisuje indeks nadrzędny do zmiennej, której nazwę wybrałeś (fIndex
), aby nie została nadpisana przez zakres potomny.Spójrz na moją odpowiedź na podobne pytanie .
Przez aliasing
$index
nie musimy pisać takich szalonych rzeczy$parent.$parent.$index
.O wiele bardziej eleganckie rozwiązanie niż
$parent.$index
używanie ng-init :Plunker: http://plnkr.co/edit/knwGEnOsAWLhLieKVItS?p=info
źródło
Możesz także przejąć kontrolę nad indeksem dziadka, stosując następujący kod
źródło
Możesz po prostu użyć use $ parent. $ Index .where rodzic będzie reprezentował obiekt rodzica powtarzającego się obiektu.
źródło
$ Parent nie działa, jeśli jest wielu rodziców. zamiast tego możemy zdefiniować nadrzędną zmienną indeksową w init i użyć jej
źródło