ng-repeat和ng-switch不适用于同一元素

all*_*hou 2 angularjs ng-switch angularjs-directive angularjs-scope angularjs-ng-repeat

JS

$scope.mode = "test"
$scope.array = ['test1', 'test2', 'test3']
Run Code Online (Sandbox Code Playgroud)

HTML

<div ng-switch on="mode">
    <div ng-repeat="item in array" ng-switch-when="test">
        Test {{item}}
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我得到的输出是

Test Test Test
Run Code Online (Sandbox Code Playgroud)

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

PSL*_*PSL 5

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

现在从1.3.x版本的角度来看,ng-switch的优先级已经被修改为1200并且ng-repeat保持在1000,因此ng-repeated范围将占优势,因为它现在具有较低的优先级,并且在那种情况下它将起作用.

Plnkr