Jest to sposób, który działa, który nie korzysta z $parent
. Przeszukuje w górę przez zagnieżdżone zakresy, aby znaleźć obiekt, którego używasz, jednak wiele zakresów musi przejść.
W zakresie, który zawiera listę można zdefiniować obiekt z listy jako właściwość, na przykład:
$scope.obj = {};
$scope.obj.items = ['item1','item2','item3'];
Następnie mają ng-repeat
wyglądać następująco:
<div ng-repeat="item in obj.items | filter:'item3' track by $index">
{{obj.items[ obj.items.indexOf(item) ]}}
</div>
(musisz użyć obj.items[ obj.items.indexOf(item) ]
zamiast obj.items[ $index ]
, ponieważ $index
jest indeksem filtrowanej tablicy, a nie oryginałem)
Powodem tego jest, ponieważ podczas gdy obj
nie istnieje w bieżącym zakresie, podczas próby uzyskania dostępu do jego właściwości, Angular będzie wyglądał powyżej bieżącego zakresu, zamiast podawać błąd (jeśli po prostu próbowałeś {{obj}}
, to byłby niezdefiniowany, i Angular byłby szczęśliwy, nie dając ci nic, zamiast przeglądać wyższe zakresy). Jest to pomocne Informacje o zagnieżdżonych zakresów: http://www.angularjshub.com/examples/basics/nestedcontrollers/
W moim przypadku potrzebowałem track by $index
, bo miałem wejście z ng-model
związany do elementu w tablicy, a gdy model aktualizowane, wejście będzie rozmycie bo myślę HTML był ponownie renderowany. Konsekwencją użycia track by $index
jest powtarzanie elementów w tablicy o identycznych wartościach. Jeśli zmodyfikujesz coś innego niż pierwsze, zdarzają się dziwne rzeczy. Być może możesz filtrować unikalność, aby tego uniknąć.
Jestem stosunkowo nowy w AngularJS, więc proszę o komentarz, jeśli jest coś dużego, czego mi brakuje. Ale to działa, więc używam go przynajmniej.
To powinno działać. czy {{campaign.name}} działa poza ng-repeat? – Anoop
Zakresy potomne, które ng-repeat tworzy prototypowo, dziedziczą z zakresu nadrzędnego, więc wszystkie właściwości zdefiniowane w zakresie nadrzędnym powinny być widoczne w zakresach potomnych ng-repeat. Czy masz inną dyrektywę zdefiniowaną na divie lub wewnątrz niej? –
OK. Mam to. Dziękuję wam za komentarze. –