5

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

明らかに私の構文は間違っています、誰かが私を正しい方向に向けることができますか

4

2 に答える 2

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;
  }
}
于 2013-01-08T18:11:32.173 に答える
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' } );
  }
}
于 2013-01-08T20:08:47.467 に答える