Ich möchte den Index der übergeordneten Liste (foos) als Argument für einen Funktionsaufruf in der untergeordneten Liste (foos.bars) verwenden.
Ich habe einen Beitrag gefunden, in dem jemand die Verwendung von $ parent. $ Index empfiehlt, der jedoch $index
nicht Eigentum von ist $parent
.
Wie kann ich auf den Index des Elternteils zugreifen 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>
Antworten:
Mein Beispielcode war korrekt und das Problem war etwas anderes in meinem tatsächlichen Code. Trotzdem weiß ich, dass es schwierig war, Beispiele dafür zu finden, also beantworte ich es, falls jemand anderes sucht.
quelle
ng-if
im Code haben, wie ich gerade herausgefunden habe.ng-if
eine zusätzliche$parent
Referenz erforderlich ist . Hat mir Kopfschmerzen erspart.Gemäß den ng-repeat-Dokumenten http://docs.angularjs.org/api/ng.directive:ngRepeat können Sie den Schlüssel- oder Array-Index in der Variablen Ihrer Wahl speichern.
(indexVar, valueVar) in values
so kannst du schreiben
Eine Stufe höher ist mit $ parent. $ Index immer noch ziemlich sauber, aber bei mehreren Eltern kann es chaotisch werden.
Hinweis:
$index
Wird weiterhin in jedem Bereich definiert und nicht durch ersetztfIndex
.quelle
$parent.$index
ein(fIndex, f)
Verfahren, wird immer noch $ Index (nicht weggelassen) definiert werden - so der Index als beide zugänglich wird$index
undfIndex
.$index
funktioniert die Verwendung nicht, das Hinzufügen der FunktionenfIndex
jedoch. Ich habe keine einzige Ahnung, warum$index
es nicht funktioniert (es funktioniert an anderen Stellen in meinem Code), aber nachdem ich einige Tage lang gekämpft hatte, hörte ich auf, mich zu kümmern, als ich diese Antwort fand. Es ist auch etwas besser lesbar, wenn Sie mehrereng-repeat
IMO haben.ng-repeat
Iteration ihren eigenen Bereich erstellt, der auch ihren eigenen definiert$index
und den des Elternteils überschreibt$index
. Wenn Sie ein{{$index}}
Recht über oder unter dem innerstenng-repeat
Element einfügen, wird der Wert des Elternteils angezeigt. Wenn Sie ihn in das innersteng-repeat
Element einfügen, wird der Wert des Kindes angezeigt. Wenn Sie den Ansatz in dieser Antwort verwenden, wird der übergeordnete Index nur einer Variablen zugewiesen, deren Namen Sie ausgewählt haben (fIndex
), damit er nicht von einem untergeordneten Bereich überschrieben wird.Schauen Sie sich meine Antwort auf eine ähnliche Frage an .
Durch Aliasing müssen
$index
wir keine verrückten Sachen wie schreiben$parent.$parent.$index
.Viel elegantere Lösung als
$parent.$index
bei Verwendung von ng-init :Plunker: http://plnkr.co/edit/knwGEnOsAWLhLieKVItS?p=info
quelle
Sie können die Kontrolle über den Grand Parent-Index auch über den folgenden Code erhalten
quelle
Sie können einfach use $ parent. $ Index verwenden, wobei parent das Objekt des übergeordneten sich wiederholenden Objekts darstellt.
quelle
$ parent funktioniert nicht, wenn mehrere Eltern vorhanden sind. Stattdessen können wir in init eine übergeordnete Indexvariable definieren und verwenden
quelle