无法使用多个参数在ng-repeat中使用过滤器

时间:2017-01-25 18:26:37

标签: javascript angularjs

之前我在我的应用中使用了过滤器,但这是我第一次需要向过滤器发送额外的参数。似乎有一个隐式参数在使用时传递给过滤器:

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个语句在执行。

1 个答案:

答案 0 :(得分:0)

我无法使用多个参数进行过滤,但我找到了一个同样有效的替代方法。

替换:

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

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

getFilteredList是一个附加到我的控制器中的$scope的函数,它迭代list并返回一个只包含我想要的元素的数组。