AngularJS:嵌套循环中的$ index by ng-repeat轨道

tra*_*sis 48 angularjs angularjs-ng-repeat

我的嵌套ng-repeat循环需要第二个$ index.我该怎么做,在哪里放?

AngularJS网站

使用ngInit可以为这些属性创建别名.例如,当嵌套ngRepeats时,这可能很有用.

<div ng-repeat="person in persons track by $index">
    <div ng-repeat="something in array track by $index2"> <!-- where to init this and how to manage it?-->
Run Code Online (Sandbox Code Playgroud)

如果我再次使用$ index,它似乎有用,但我不确定这是正确的吗?我确信有一种简单而正确的方法,我只是无法找到一个例子.

谢谢

Ant*_*Chu 130

$index将引用最里面ngRepeat范围的索引,所以如果这是你需要的,你可以使用它.

文档描述的是您需要$index在父级中访问的场景ngRepeat.您可以通过以下几种方式获得它:一种是使用$parent,另一种是使用ngInit,正如Angular文档所建议的那样.这是一个例子......

<li ng-repeat="thing in things" ng-init="parentIndex = $index">
    {{ $index }}
    <ul>
        <li ng-repeat="value in thing.values">
            {{ value }} 
            {{ $index }} <!-- inner $index -->
            {{ $parent.$index }} <!-- parent $index -->
            {{ parentIndex }} <!-- also parent $index -->
        </li>
    </ul>
</li>
Run Code Online (Sandbox Code Playgroud)

小提琴

  • 如果您打算稍后从阵列中删除任何列表项,请非常小心这种方法.例如,如果您从阵列中删除`things`任何数组项,然后$指数会自我更新,以反映该阵列的新状态,但`parentIndex`仍将指向被删除的项目的索引.这在删除时将是一个巨大的问题.保存状态并刷新页面后,`parentIndex`将正确反映,即您必须重新渲染数组列表才能显示更新的索引.经过3天的挣扎,我想到了这一点. (4认同)