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 那么它就可以正常工作。
最佳答案
这是因为 ng-switch
创建了一个子作用域,这同样适用于 ng-repeat。 ng-repeat 以优先级运行 1000 和 ng-switch
位于 800 。因此,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
关于angularjs - ng-repeat 和 ng-switch 不适用于同一元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25675742/