我想使用父列表的索引(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>
答案 0 :(得分:277)
我的示例代码是正确的,问题是我的实际代码中的其他内容。尽管如此,我知道很难找到这方面的例子,所以我正在回答它,以防其他人在寻找。
<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>
答案 1 :(得分:217)
根据ng-repeat文档http://docs.angularjs.org/api/ng.directive:ngRepeat,您可以将键或数组索引存储在您选择的变量中。 (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
替换。
答案 2 :(得分:41)
看看my answer to a similar question
通过别名$index
,我们不必编写像$parent.$parent.$index
这样的疯狂内容。
$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>
答案 3 :(得分:11)
您还可以通过以下代码控制祖父索引
$parent.$parent.$index
答案 4 :(得分:2)
你可以简单地使用$ parent。$ index .where parent表示父重复对象的对象。
答案 5 :(得分:-1)
$ parent不起作用。而不是我们可以在init中定义父索引变量并使用它
<div data-ng-init="parentIndex = $index" ng-repeat="f in foos">
<div>
<div data-ng-init="childIndex = $index" ng-repeat="b in foos.bars">
<a ng-click="addSomething(parentIndex)">Add Something</a>
</div>
</div>
</div>