31

我有一个对象数组如下。

$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.students 本身没有改变。

4

3 回答 3

27

还有另一种方法可以做到这一点:AngularJS 过滤器。你可以这样写:

var selectedCount = $filter('filter')($scope.students, { isSelected: true }).length;
于 2014-11-17T13:52:10.560 回答
21

您还可以使用 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;
}
于 2016-04-04T10:57:14.043 回答
19

您可以将以下方法添加到您的控制器。您范围内的变量selectedStudentsCount将保留所有选定学生的数量(其中isSelected设置为true)。

仅当不为空时才会执行计算所选用户的功能。否则对于变量将返回。 angular.forEachstudents studentsselectedStudentsCount0

$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>
于 2013-03-12T12:11:14.597 回答