AngularJS试图理解js过滤器

Lan*_*nce 5 angularjs

试图理解AngularJS的"过滤器"功能,大多数示例都在视图/ HTML端有过滤器,但我需要在控制器/ JS端.

这有效

  $scope.getPickedPeopleCount = function(){
    var thisCount = 0;
    angular.forEach($scope.allPeople, function(person){
      if(person.PICKED){thisCount++}
    });
    return thisCount;
  }
Run Code Online (Sandbox Code Playgroud)

但这失败了

  $scope.getPickedPeopleCount = function(){
    return $scope.allPeople.filter(PICKED:'true').length;
  }
Run Code Online (Sandbox Code Playgroud)

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

Jos*_*ler 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;
  }
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*cok 11

除了@Josh的答案之外,还可以使用filterName Filter语法将过滤器(预定义的Angular和自定义过滤器)注入控制器,指令,自定义过滤器等.例如,filterFilter,dateFilter,myCoolSortFilter等.来自$ filterProvider文档:

过滤器函数使用后缀为过滤器名称的$ injector注册Filter.

您可以通过这种方式更加具体地了解真正的依赖关系(尽管注入$ filter可以访问所有Angular过滤器).

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

  $scope.getPickedPeopleCount = function () {
    return filterFilter( $scope.allPeople, { PICKED: 'true' } );
  }
}
Run Code Online (Sandbox Code Playgroud)