ng-repeat和ng-switch对同一元素不起作用



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开关,它就会正常工作。

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

现在,从angular的1.3.x版本开始,ng开关的优先级已修订为1200,并且ng重复保持在1000处,因此ng重复范围将占上风,因为它现在的优先级较低,在这种情况下会起作用。

Plnkr

最新更新