<!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
。为什么会这样?
答案 0 :(得分:3)
行为的原因是您已将count()
函数附加到$scope
并在绑定表达式中使用它。在AngularJS中,用于计算表达式和呈现视图的$digest
周期可以多次运行。
在伪代码中,$digest
周期看起来像这样:
$scope
属性$scope
属性是否已更改(例如,通过评估绑定表达式)$scope
属性stabalise 答案 1 :(得分: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>
答案 2 :(得分: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;
}