来自子ng-repeat的父子ng-repeat的访问索引

我想使用父列表(foos)的索引作为子列表(foos.bars)中的函数调用的参数。

我发现有人推荐使用$ parent。$ index,但$index不是$parent一个属性。

我如何访问父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> 

我的示例代码是正确的,这个问题是在我的实际代码中的其他东西。 不过,我知道很难find这样的例子,所以我回答它,以防别人正在寻找。

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

根据ng-repeat docs http://docs.angularjs.org/api/ng.directive:ngRepeat ,可以将键或数组索引存储在您select的variables中。 (indexVar, valueVar) in values

所以你可以写

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

上一级还是挺干净的,用$ parent。$ index但是有好几个家长起来,事情可能会变得杂乱无章。

注意: $index将继续在每个范围定义,它不会被fIndex所取代。

看看我对类似问题的回答 。
通过别名$index我们不必写出像$parent.$parent.$index这样疯狂的东西。


更优雅的解决schemewhan $parent.$index正在使用ng-init :

 <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

您还可以通过以下代码获得对父级索引的控制

 $parent.$parent.$index 

你可以简单地使用use $ parent。$ index。父级代表父级重复对象的对象。