2013-01-08 78 views
5

試圖瞭解AngularJS的「過濾器」功能,大多數示例在視圖/ HTML端都有過濾器,但我需要在控制器/ JS端進行過濾。AngularJS試圖瞭解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; 
    } 

顯然,我的語法是錯誤的,可有人點我在正確的方向

回答

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; 
    } 
} 
+0

應該給你理解問題的獎勵積分。 –

11

除了@Josh的回答,還可以使用 filterName過濾器語法將過濾器(預定義的Angular和您自定義的過濾器)注入到控制器,指令,自定義過濾器等中。例如,filterFilter,dateFilter,myCoolSortFilter等。從$filterProvider文檔:

過濾功能與Filter後綴過濾器名稱下的$注射器登記。

您可以通過這種方式更具體地瞭解真正的依賴關係(儘管注入$ filter可以讓您訪問所有的Angular過濾器)。

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

    $scope.getPickedPeopleCount = function() { 
    return filterFilter($scope.allPeople, { PICKED: 'true' }); 
    } 
} 
+0

@ MarkRajcok-這是一個很好的觀點。 +1 –