之前我在我的应用中使用了过滤器,但这是我第一次需要向过滤器发送额外的参数。似乎有一个隐式参数在使用时传递给过滤器:
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-repeat修改为:
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 :(得分:0)
我无法使用多个参数进行过滤,但我找到了一个同样有效的替代方法。
替换:
ng-repeat="listEntry in (list | filter: filterByDay(1))"
与
ng-repeat="listEntry in getFilteredList(list,1)"
getFilteredList
是一个附加到我的控制器中的$scope
的函数,它迭代list
并返回一个只包含我想要的元素的数组。