1

比我更有经验的人可以向我解释为什么会这样编译:

    <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-repeat 不是吗?

    <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.$index 调用 selectedNodeAtLevel() 函数,而不仅仅是 $index。为什么它会为一个而不是另一个编译?我该怎么做才能达到同样的效果?

(通过“编译”我的意思是它不会生成任何 HTML,只是有问题的行的注释掉的副本)

谢谢你的耐心!

4

1 回答 1

3

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

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

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

于 2013-06-25T21:13:45.263 回答