【问题标题】:AngularJS: ng-repeat track by $index inside nested loopsAngularJS:在嵌套循环中通过 $index 进行 ng-repeat 跟踪
【发布时间】:2014-12-31 18:27:29
【问题描述】:

我的嵌套 ng-repeat 循环需要第二个 $index。我应该如何以及在哪里放置它?

AngularJS site

使用 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?-->

如果我再次使用 $index,它似乎可以工作,但我不确定这是正确的吗? 我确信有一种简单而正确的方法,我只是找不到示例。

谢谢

【问题讨论】:

    标签: angularjs angularjs-ng-repeat


    【解决方案1】:

    $index 将引用最内层 ngRepeat 范围内的索引,所以如果这是您需要的,您可以使用它。

    文档描述的是您需要访问父 ngRepeat 中的 $index 的场景。您可以通过多种方式获得它:一种是使用 $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>
    

    Fiddle

    【讨论】:

    • 正是我想知道的。对文档有点困惑。谢谢
    • 值得注意的是,它适用于任何可用的 javascript 对象。我用它为外部循环 $last boolean 创建别名,使其在内部循环中可用。
    • 如果您打算稍后从数组中删除任何列表项,请非常非常小心地使用这种方法。例如,如果您从数组things 中删除任何数组项,则 $index 将自我更新以反映数组的新状态,但parentIndex 仍将指向已删除项的索引。当涉及到删除时,这将是一个巨大的问题。 parentIndex 将在您保存状态并刷新页面后正确反映,即您必须重新渲染数组列表才能显示更新的索引。经过三天的努力,我想到了这一点。
    • 我有一个复杂的结构,我使用嵌套的 For 循环创建表单。对我来说,'ng-init' 解决了这个问题。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    • 2015-03-01
    • 2015-07-05
    • 2017-04-12
    • 2023-04-01
    • 1970-01-01
    相关资源
    最近更新 更多