我有一个对象数组如下。
$scope.students = [{'isSelected': true},
{'isSelected': true},
{'isSelected': false},
{'isSelected': true},
{'isSelected': true},
]
如何获取isSelected
属性设置为true
的计数项?
问题是$scope.students
是从REST api中获取的,只是循环遍历$ scope.students变量,因为变量是undefined
不起作用,直到请求完成,因此循环代码错误地说$scope.students is not defined
。
我尝试使用$watch
但是在这种情况下我必须在watch指令下定义循环,并且只有在定义$ scope.students时才会工作一次,之后循环不能用作$ scope。学生本身并没有改变。
答案 0 :(得分:27)
还有另一种方法:AngularJS过滤器。 你可以这样写:
var selectedCount = $filter('filter')($scope.students, { isSelected: true }).length;
答案 1 :(得分:16)
您可以将以下方法添加到控制器中。范围中的变量selectedStudentsCount
将保留所有所选学生的数量(其中isSelected
设置为true
)。
仅当angular.forEach
不为空时,才会执行students
中所选用户的功能计数。否则空 students
变量selectedStudentsCount
将返回0
。
$scope.selectedStudentsCount = function() {
var count = 0;
angular.forEach($scope.students, function(student){
count += student.isSelected ? 1 : 0;
});
return count;
}
请注意,selectedStudentsCount
是一项功能,因此必须在模板中使用()
进行调用,例如
<h2>Total selected students: {{selectedStudentsCount()}}</h2>
答案 2 :(得分:16)
您还可以使用javascript过滤方法(请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)
$scope.selectedStudentsCount = function() {
return $scope.students.filter(function(obj){return obj.isSelected}).length;
}