2

JS

$scope.mode = "test"
$scope.array = ['test1', 'test2', 'test3']

HTML

<div ng-switch on="mode">
    <div ng-repeat="item in array" ng-switch-when="test">
        Test {{item}}
    </div>
</div>

当我执行上述操作时,我得到的输出是

Test Test Test

它似乎无法访问项目。如果我删除 ng-switch-when 那么它工作正常。

4

1 回答 1

5

这是因为ng-switch创建了一个子范围,同样适用于 ng-repeat。ng-repeat 以优先级1000ng-switch800运行。因此,ng-repeat在每个重复的 div 元素上创建的子作用域都会被 覆盖ng-switch,因此ng-repeat元素上分配的子作用域最终会消失。一种可能的方法是将 ng-switch 包装在 ng-repeat 之外,因为无论如何您都不想为每个重复的元素评估 ng-switch 表达式。这是1.2版本。

现在从 Angular 的 1.3.x 版本开始, ng-switch 的优先级已修改为1200并且 ng-repeat 保持在1000,因此 ng-repeated 范围将占上风,因为它现在的优先级较低,并且在这种情况下可以工作。

PLNKR

于 2014-09-04T22:26:39.467 回答