2013-01-08 12 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の回答に加えて、フィルタ名のフィルタ構文を使用して、コントローラ、ディレクティブ、カスタムフィルタなどにフィルタ(あらかじめ定義された角型と独自のもの)を注入することもできます。例えば、などfilterFilter、dateFilter、myCoolSortFilterは、$filterProviderドキュメントから:

フィルタ機能は、Filter接尾辞フィルタ名の下に$インジェクタに登録されています。

このように実際の依存関係を具体的に示すことができます($ filterを注入するとすべての角フィルタにアクセスできます)。

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

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

@ MarkRajcok-これは良い点です。 +1 –

関連する問題