2017-01-25 5 views
1

これまで私のアプリでフィルタを使用していましたが、フィルタに追加のパラメータを送信する必要があります。このように使用する場合、フィルタに渡される暗黙のパラメータがあるようです:私のコントローラで複数のパラメータを使用してng-repeatでフィルタを動作させることができません

ng-options="t as t.TeamName for t in (teamList | filter: filterTeams) track by t.TeamId"> 

私が持っている:

 $scope.filterTeams = function (team) { 
      if ($scope.EU.selectedUsersDepartment && !isEmpty($scope.selectedUsersDepartment)) { 
       return (team.Department.DepartmentId === $scope.EU.selectedUsersDepartment.DepartmentId); 
      } else { 
       return true; 
      } 
     }; 

teamは、暗黙的にfilterTeamsに渡されるようです。

私はそれが失敗した複数のパラメータでこのアイデアを拡張しよう:

ng-repeat="listEntry in (list | filter: filterByDay(listEntry, 1))" 

コントローラーコード:

 $scope.filterByDay = function (listEntry, dayOffset) { 
      return isDateEqual(listEntry.myDate, addDays($scope.NIC.selectedWeek, dayOffset)) || 
        isDateEqual(listEntry.myOtherDate, addDays($scope.NIC.selectedWeek, dayOffset)); 
     }; 

listEntryは常に定義されていませんが、dayOffsetは細かい伝わってきます。配列要素の明示的な受け渡しは失敗したようですが、テンプレートにパラメータを指定すると、暗黙の受け渡しも破棄されます。

この回答で提案されているように私は別の構文を試してみた:

How do I call an Angular.js filter with multiple arguments?

ng-repeat="listEntry in (list | filterByDay: listEntry:1)" 

しかし、これも失敗しました。

この次の答えはオプション2に専用の角度フィルタを使用するオプションについて説明します。

How to use parameters within the filter in AngularJS?

しかし、私はフィルタとして使用されている$scopeに添付機能の違いに明確ではないんだと私のルートアプリケーションモジュールにフィルタを追加したり、複数のパラメータを渡す方法を示す例はありません。

私はまた、あなたのフィルタで関数を返す示唆この回答を以下試してみました:

Passing arguments to angularjs filters

私はこれに私のngのリピートを修正:これに

ng-repeat="listEntry in (list | filter: filterByDay(1))" 

そして、私のfilterByDay機能:

 $scope.filterByDay = function (dayOffset) { 
      return function (listEntry) { 
       console.log('listEntry: '); 
       console.log(listEntry); 
       console.log('dayOffset: '); 
       console.log(dayOffset); 
       return isDateEqual(listEntry.myDate, addDays($scope.NIC.selectedWeek, dayOffset)) || 
        isDateEqual(listEntry.myOtherDate, addDays($scope.NIC.selectedWeek, dayOffset)); 
      } 
     }; 

filterByDayから返された関数が動作しないようにします。console.log文は実行されません。

+0

最後のものが確実に機能するはずです。作業中の[plunker](https://plnkr.co)の例を提供してください – GProst

答えて

0

複数のパラメータを扱うフィルタを取得することができませんでしたが、同じように機能する代替方法が見つかりました。

は交換してください:

ng-repeat="listEntry in getFilteredList(list,1)" 

getFilteredList

ng-repeat="listEntry in (list | filter: filterByDay(1))" 

list上で、私のコントローラその繰り返し処理で$scopeに添付機能であり、私が欲しいだけの要素の配列を返します。

関連する問題