2013-01-08 14 views
5

Cercando di capire la funzione "filtro" di AngularJS, la maggior parte degli esempi ha i filtri sul lato vista/HTML ma ho bisogno sul lato controller/JS.AngularJS che cerca di capire il filtro js

Questo funziona

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

ma questo non riesce

$scope.getPickedPeopleCount = function(){ 
    return $scope.allPeople.filter(PICKED:'true').length; 
    } 

Ovviamente la mia sintassi è sbagliata, qualcuno mi può puntare nella giusta direzione

risposta

19

Per utilizzare un filtro in un controllore, è deve iniettare il servizio $ filter e quindi richiedere il filtro per nome:

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

Dovrebbe darti punti bonus per capire la domanda. –

11

In aggiunta alla risposta di @ Josh, i filtri (quelli angolari predefiniti e quelli personalizzati) possono anche essere iniettati in controller, direttive, filtri personalizzati, ecc. Utilizzando la sintassi del filtro filterName. Per esempio, filterFilter, dateFilter, myCoolSortFilter, ecc Dalle $filterProvider documentazione:

La funzione di filtro è registrato con il $ iniettore sotto il nome del filtro suffisso Filter.

Si può essere più specifici sulle dipendenze reali in questo modo (sebbene l'iniezione di $ filtro dia accesso a tutti i filtri Angolari).

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

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

@ MarkRajcok- Questo è un buon punto. +1 –