我可以使用帮助来了解如何使这两个示例以相同的方式工作。对于初学者,这是我的完整示例:http: //jsfiddle.net/tylerbrinks/DZbfD/
我正在使用一个简单的控制器来管理索引。我意识到这不是 100% 必要的,但我正在将一个更大的问题简化为最基本的部分以寻求帮助。控制器如下所示:
function TabCtrl($scope){
$scope.index = 0;
}
我正在使用索引值来维护列表中的哪个项目被选中(如选项卡)。
当元素已经在 DOM 中时,它们的行为完全符合我的预期。单击每个项目可切换选择哪个项目。在 JsFiddle 中,颜色会更改以显示所选项目。
<div ng-controller="TabCtrl">
<div ng-class="{selected: index == 0}" ng-click="index = 0">Click Me. Position is 0, scope.index is {{index}}</div>
<div ng-class="{selected: index == 1}" ng-click="index = 1">Click Me. Position is 1, scope.index is {{index}}</div>
<div ng-class="{selected: index == 2}" ng-click="index = 2">Click Me. Position is 2, scope.index is {{index}}</div>
</div>
这是完美的 - 表现得如我所愿。我的问题是我有一个动态列表,我正在使用ng-repeat来构建它。当我这样做时,ng-repeat似乎为列表中的每个项目提供了一个新的范围。这意味着我无法在它们之间切换,因为它们不共享相同的索引属性。相反,每个列表项都有自己的范围,每个范围都有唯一的索引值。
这是同样的事情,但使用 ng-repeat。我没有在点击时对索引进行硬编码,而是将其设置为中继器的 $index 属性。
<div ng-controller="TabCtrl">
<div ng-repeat="item in [1,2,3]" ng-class="{selected: index == $index}" ng-click="index = $index">Click Me. Position is: {{$index}}, scope.index is {{index}}</div>
</div>
如何使动态列表像静态列表一样共享单个范围?
谢谢您的帮助!