5

试图理解 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;
  }

显然我的语法是错误的,有人能指出我正确的方向吗

4

2 回答 2

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;
  }
}
于 2013-01-08T18:11:32.173 回答
11

除了@Josh 的回答之外,过滤器(预定义的 Angular 过滤器和您自己的自定义过滤器)也可以使用filterName过滤器语法注入到控制器、指令、自定义过滤器等中。例如,filterFilter、dateFilter、myCoolSortFilter 等。来自$filterProvider文档:

过滤器函数在 $injector 中注册,过滤器名称后缀为Filter.

通过这种方式,您可以更具体地了解实际依赖项(尽管注入 $filter 可以让您访问所有 Angular 过滤器)。

function MyCtrl ( $scope, filterFilter ) {
  // more code...

  $scope.getPickedPeopleCount = function () {
    return filterFilter( $scope.allPeople, { PICKED: 'true' } );
  }
}
于 2013-01-08T20:08:47.467 回答