我可以幫助理解如何使這兩個示例以相同的方式工作。對於初學者來說,這裏是我的完整示例:http://jsfiddle.net/tylerbrinks/DZbfD/Ang-ng-repeat會導致隔離範圍
我正在使用一個簡單的控制器來管理索引。我意識到這不是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>
如何使動態列表共享一個範圍,如靜態列表?
感謝您的幫助!
你試過在父範圍中創建一個對象,它將出現在所有的孩子中?就像在TabCtrl中一樣,你可以創建一些'$ scope.sharedObject = {index:0}'然後在每個項目中修改'sharedObject.index' – DotDotDot