2015-06-04 38 views
1

在角JS控制器,我們把一張表,如下$範圍:爲什麼角JS的行爲有所不同?

$scope.processes = ['process-aa','process-bb', 'process-cc']; 
$scope.selectedProcess=-1; 
$scope.collapseProcess = function(index) 
{ 
    console.log('-----------------------in collapseProcess-------------- %s, %s', $scope.selectedProcess, index ); 
    return $scope.selectedProcess != index; 

}; 

$scope.switchCollapse = function(index) 
{ 
    $scope.selectedProcess = index; 
} 

頁面會列出所有這些過程,有一個div每一個過程裏面,我們做這個div撥動。在任何時候,只有一個div將被允許擴大。 HTML如下:

<li ng-repeat="process in processes" class="resultItem" 
    ng-click="switchCollapse($index)"> 
    <div collapse="collapseProcess($index)" class="collapseBlock"> </div> 
</li> 

上述代碼完全按我的預期工作。當我選擇第一個進程時,內部DIV將被展開,如果我選擇第二個進程,則第一個進程的div將被摺疊,第二個進程的div將被展開。

不過,我不明白是爲什麼,如果我改變代碼是不工作:

<li ng-repeat="process in processes" class="resultItem" 
    ng-click="selectedProcess=$index"> 
    <div collapse="toggleProcess($index)" class="collapseBlock"> </div> 
</li> 

如果我改變,因爲上面的代碼,然後當我點擊任何程序, DIV不會被擴大。函數collapseProcess中的輸出爲: ----------------------- in collapseProcess -------------- -1 0 -----------------------在collapseProcess -------------- -1 1 ------ -----------------在collapseProcess -------------- -1 2

selectedProcess將始終爲-1(即控制器中的初始值)。這很奇怪,我不明白爲什麼它是這樣的?

,更有趣,如果我更改HTML是:

<li ng-repeat="process in processes" class="resultItem" 
    ng-click="selectedProcess=$index"> 
    <div collapse="$scope.selectedProcess != index" class="collapseBlock"> </div> 
</li> 

然後,如果我選擇一個特定的過程中,其內部的div將擴大,然而,DIV擴大爲原來的選擇的過程贏得」如果我選擇越來越多的流程,越來越多的DIV將會擴大。

由於我是角JS的新手,我不完全理解我的代碼塊之間的區別。任何人都可以幫忙嗎?提前致謝。

+0

在上面的例子中試試這個「$ scope.selectedProcess!= $ index」,索引中缺少$ – Devjit

回答

3

感謝您的回覆。打字時我錯過了$。實際的代碼確實有$ index。

我想出了這個問題,似乎ng-repeat創建自己的範圍,這就是爲什麼它不起作用。

如果我改變的代碼是:

$scope.obj={ 
    selectedProcess: -1 
}; 

,並參考obj.selectedProcess在HTML中。那麼它會工作。所以我想這是由ng-repeat創建的範圍造成的。對?

+0

是的,你是對的 –

相關問題