试图理解AngularJS的“过滤器”功能,大多数示例都在视图/ HTML端有过滤器,但我需要在控制器/ JS端。
这有效
$scope.getPickedPeopleCount = function(){
var thisCount = 0;
angular.forEach($scope.allPeople, function(person){
if(person.PICKED){thisCount++}
});
return thisCount;
}
但是失败了
$scope.getPickedPeopleCount = function(){
return $scope.allPeople.filter(PICKED:'true').length;
}
显然我的语法错了,有人能指出我正确的方向
答案 0 :(得分:19)
要在控制器中使用过滤器,必须注入$ filter服务,然后按名称请求过滤器:
function MyCtrl ( $scope, $filter ) {
var filter = $filter('filter'); // could be orderBy, etc.
// more code...
$scope.getPickedPeopleCount = function () {
return filter( $scope.allPeople, { PICKED: 'true' } ).length;
}
}
答案 1 :(得分:11)
除了@Josh的答案之外,还可以使用 filterName 过滤器将过滤器(预定义的Angular和自定义的过滤器)注入到控制器,指令,自定义过滤器等中。句法。例如,filterFilter,dateFilter,myCoolSortFilter等。来自$filterProvider文档:
过滤器功能在过滤器名称后面加上
Filter
注册了$ injector。
您可以通过这种方式更加具体地了解真正的依赖关系(尽管注入$ filter可以访问所有Angular过滤器)。
function MyCtrl ( $scope, filterFilter ) {
// more code...
$scope.getPickedPeopleCount = function () {
return filterFilter( $scope.allPeople, { PICKED: 'true' } );
}
}