簡體   English   中英

為什么angular JS表現不同?

[英]Why angular JS behave differently?

在Angular JS控制器中,我們將列表放入$ scope中,如下所示:

$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中的輸出是:-----------------------在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的新手,我不完全理解我的代碼塊之間的區別。 有人可以幫忙嗎? 非常感謝提前。

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

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

如果我將代碼更改為:

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

並參考HTML中的obj.selectedProcess。 那會有用。 所以我猜這是由ng-repeat創建的范圍引起的。 對?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM