提问者:小点点

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


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

我发现一个帖子,里面有人推荐用$parent。$index,但< code>$index不是< code>$parent的属性。

如何访问父级ng-重复的索引?

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

共3个答案

匿名用户

我的示例代码是正确的,问题出在我的实际代码中。尽管如此,我知道很难找到这样的例子,所以我回答这个问题,以防其他人也在看。

<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 文档 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取代。

匿名用户

看看我对类似问题的回答
通过别名$index,我们不必编写像$sparent这样疯狂的东西$家长$索引

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

普伦克:http://plnkr.co/edit/knwGEnOsAWLhLieKVItS?p=info