AngularJS试图理解js过滤器

时间:2013-01-08 17:42:59

标签: angularjs

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

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

2 个答案:

答案 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' } );
  }
}