wake-up-neo.com

Zugriffsindex des übergeordneten ng-repeat von untergeordnetem ng-repeat

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, aber $index Ist keine Eigenschaft von $parent.

Wie kann ich auf den Index des übergeordneten Elements ng-repeat Zugreifen?

<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>
214
Coder1

Mein Beispielcode war korrekt und das Problem war etwas anderes in meinem tatsächlichen Code. Ich weiß jedoch, dass es schwierig war, Beispiele dafür zu finden, und beantworte sie, falls jemand anders nach ihnen sucht.

<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>
278
Coder1

Laut ng-repeat docs http://docs.angularjs.org/api/ng.directive:ngRepeat können Sie den Schlüssel- oder Array-Index in einer Variablen Ihrer Wahl speichern. (indexVar, valueVar) in values

damit du schreiben kannst

<div ng-repeat="(fIndex, f) in foos">
  <div>
    <div ng-repeat="b in foos.bars">
      <a ng-click="addSomething(fIndex)">Add Something</a>
    </div>
  </div>
</div>

Eine Ebene höher ist mit $ parent. $ Index immer noch ziemlich sauber, aber mehrere Eltern oben können die Dinge chaotisch werden.

Hinweis: $index wird weiterhin in jedem Bereich definiert und nicht durch fIndex ersetzt.

217
Samuli Ulmanen

Schauen Sie sich meine Antwort auf eine ähnliche Frage an .
Durch Aliasing von $index Müssen wir keine verrückten Sachen wie $parent.$parent.$index Schreiben.


Viel elegantere Lösung, als $parent.$indexng-init verwendet:

<ul ng-repeat="section in sections" ng-init="sectionIndex = $index">
    <li  class="section_title {{section.active}}" >
        {{section.name}}
    </li>
    <ul>
        <li class="tutorial_title {{tutorial.active}}" ng-click="loadFromMenu(sectionIndex)" ng-repeat="tutorial in section.tutorials">
            {{tutorial.name}}
        </li>
    </ul>
</ul>

Plunker: http://plnkr.co/edit/knwGEnOsAWLhLieKVItS?p=info

41
vucalur

Sie können den übergeordneten Index auch mit dem folgenden Code steuern

$parent.$parent.$index
11
user3728092

Sie können einfach $ parent. $ Index verwenden, wobei parent das Objekt des sich wiederholenden Elternobjekts darstellt.

2
Vivek Panday