从子ng-repeat访问父ng-repeat的索引

时间:2013-02-11 06:52:34

标签: javascript angularjs angularjs-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>

6 个答案:

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

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

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