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

时间:2014-09-04 22:10:10

标签: angularjs angularjs-directive angularjs-scope angularjs-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-switch-when,那么它可以正常工作。

1 个答案:

答案 0 :(得分:5)

这是因为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版本。

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

<强> Plnkr