2

JSNG重复和NG-开关不相同的元素

$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,那么它可以正常工作。

回答

5

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

从NG-开关的角度的优先级的的1.3.x版

现在已被修改,以1200和NG-重复保持在,所以NG-重复范围为准,因为它是低优先级的现在它会在这种情况下工作。

Plnkr

+0

感谢。这是一个很好的答案。希望有一个调试器可以帮助我查看范围,以防将来遇到类似问题。 – allenylzhou 2014-09-04 22:31:23

+0

@allenylzhou升级到最新版本的角度,你应该很好。 – PSL 2014-09-04 22:38:46