これまで私のアプリでフィルタを使用していましたが、フィルタに追加のパラメータを送信する必要があります。このように使用する場合、フィルタに渡される暗黙のパラメータがあるようです:私のコントローラで複数のパラメータを使用して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
文は実行されません。
最後のものが確実に機能するはずです。作業中の[plunker](https://plnkr.co)の例を提供してください – GProst