AngularJS内部ng重复未处理$index$函数参数中的父级

AngularJS inner ng-repeat not processing $index.$parent in function argument

本文关键字:参数 函数 index ng 未处理 AngularJS 内部      更新时间:2023-09-26

有没有比我更有经验的人能向我解释一下为什么会编译:

    <li class="btn dropdown top-stack breadcrumb-btn" ng-repeat="nodeName in selectedNodeNames">
        <a class="dropdown-toggle btn-anchor">{{nodeName}}</a>
        <ul class="dropdown-menu">
            <li ng-class="activeState($parent.$index,$index)" ng-repeat="node in selectedNodeAtLevel($index).children">
                <a ng-click="tabSelect($parent.$index,$index)">{{getIndexString(node)}}</a>
            </li>
        </ul>
    </li>

而这里面的内ng重复不是吗?

    <li class="btn dropdown top-stack breadcrumb-btn" ng-repeat="nodeName in selectedNodeNames">
        <a class="dropdown-toggle btn-anchor">{{nodeName}}</a>
        <ul class="dropdown-menu">
            <li ng-class="activeState($parent.$index,$index)" ng-repeat="node in selectedNodeAtLevel($parent.$index).children">
                <a ng-click="tabSelect($parent.$index,$index)">{{getIndexString(node)}}</a>
            </li>
        </ul>
    </li>

请注意,我使用$parent调用selectedNodeAtLevel()函数$指数,而不仅仅是美元指数。为什么它会为一个而不是另一个编译?我能做些什么来达到同样的效果?

(我所说的"编译"是指它不会生成任何HTML,只是一个注释掉的违规行副本)

谢谢你的耐心!

首先让我指出ng-repeat创建了新的作用域。此外,我假设外部重复不会位于另一个重复中。假设如此,请注意,在第一个示例中,您将$index传递给selectedNodeAtLevel函数。这是因为$index是由外部重复定义的,并在外部重复范围的上下文中解析。该$index变量对应于每个nodeName

因此,第二个例子失败了,因为在外部重复的$parent中没有定义$index(它实际上指的是该代码所在的控制器的范围)。

至少在第二种情况下,似乎您希望$index指的是内部重复,但事实并非如此,它指的是在已定义的范围中定义的$index。因此,即使在使用activeState的第一个示例中,也应该存在问题,因为其中引用了$parent.$index。请注意,从内部重复内部引用$index引用该内部作用域上的$index