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的优先级重复运行,以800为ng-switch
。因此,ng-repeat
在每个重复的div元素上创建的子作用域都会被ng-switch
覆盖,因此ng-repeat
在元素上分配的子作用区最终会消失。一种可能的方法是将ng开关包装在ng repeat之外,因为您无论如何都不想为每个重复的元素计算ng开关表达式。这是1.2版本。
现在,从angular的1.3.x版本开始,ng开关的优先级已修订为1200,并且ng重复保持在1000处,因此ng重复范围将占上风,因为它现在的优先级较低,在这种情况下会起作用。
Plnkr