2015-04-17 147 views
2
<!DOCTYPE html> 
<html> 
<head> 
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">  </script> 
</head> 
<body> 
    <div ng-app="myApp" ng-controller="personCtrl">{{count()}}</div> 
    <script> 

    var app = angular.module('myApp', []); 

    app.controller('personCtrl', function($scope) { 
     $scope.listarray=[1,2,3,4]; 
     var count=0  

     $scope.count = function() { 
      angular.forEach($scope.listarray,function(value,key){ 
       count=count+1; 
      }); 
      return count; 
     } 
    }); 
    </script> 
</body> 
</html> 

上述代碼顯示的答案是88。當var count在裏面時count功能顯示4但在count功能外顯示88。爲什麼會發生?伯爵的答案是88:爲什麼?

+0

o真的是顯示88?你能告訴我結果在小提琴手嗎? –

+2

http://jsfiddle.net/satpalsingh/0s12zf1k/,只需在函數內定義'var count'即可。 _OR_ YOu可以簡單地使用'listarray.length'像http://jsfiddle.net/satpalsingh/Lc4yvbc9/ – Satpal

回答

3

行爲的原因是您已將count()函數附加到$scope並在綁定表達式中使用它。在AngularJS中,$digest週期來計算表達式並渲染視圖可以運行多次。

在僞代碼$digest週期看起來是這樣的:

  1. 對於每個$scope財產
  2. 檢查$scope屬性更改(通過評估例如綁定表達式)
  3. 如果改變,呼叫改變處理程序(可以更新更多的示波器變量),否則繼續
  4. 重複所有示波器
  5. 重複循環1-4直到$scope性能stabalise
+0

非常感謝你 –

0

你爲什麼要使用功能或每個循環中,您可以只使用長度財產$ scope.listarray.length; 試試這個:

<head> 
<script src=  "http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">  </script> 
    </head> 

    <body> 

<div ng-app="myApp" ng-controller="personCtrl"> 
{{count}} 

    </div> 

<script> 

    var app = angular.module('myApp', []); 

    app.controller('personCtrl', function($scope) { 
    $scope.listarray=[1,2,3,4]; 

    $scope.count = $scope.listarray.length;  
    }); 
    </script> 

    </body> 
    </html> 
0

您已經創建了無限循環。每當值發生更改時都會調用函數count()。例如,你可以檢查數值是否已經改變

$scope.count = function() { 
     if(count !== 0){return count;} 
     angular.forEach($scope.listarray,function(value,key){ 
      console.log('value', value); 
      count=count+1; 
     }); 
     return count; 
    } 
+0

非常感謝你 –