1

在对我的 ng-repeat 列表实施分页后(在过滤后更新 AngularJS 中的分页

<li ng-repeat="data in filtered = (list | filter:search) ... >

我的自定义过滤器现在有问题

<li ng-repeat="data in filtered = (list | filter:search) | customFilter:search ... >

我需要这个过滤器来搜索多种语言(选择两种或多种语言)。如果我将过滤后的 = (list | filter:search)中的数据替换为 list 中的数据,您将看到它正在工作。但我需要过滤我的分页。

jsFiddle: http: //jsfiddle.net/StinsonMaster/SuEX6/4/(基于上一个线程的小提琴

4

2 回答 2

0

我建议不要在您的 ng-repeat 指令中使用表达式,而是将 ng-repeat 设置为等于列表控制器上的一个方法,该方法返回您要查找的子集或值。例如:

// In your controller

        $scope.filteredList = function() {
           return $filter('filter')($scope.list,{'language':search.language});
        }

// And in your ng-repeat 

        ng-repeat="(key,val) in filteredList()"

希望这可以帮助!

于 2013-05-07T00:10:04.077 回答
0

我想我误解了你原来的问题。

我重写了您的自定义过滤器。它并不完全是面向对象的,但稍加修饰它可能会更具可扩展性。基本上,您只需要比基本角度过滤器更具包容性的东西。

app.filter("customFilter", function() {
    return function(input, search) {
        if(search && search != undefined) {
            var _toRet = new Array();
            for(var i in search) {
                for(var k in input) {
                    if(search.indexOf(input[k].language) != -1 && _toRet.indexOf(input[k]) == -1) {
                        _toRet.push(input[k]);
                    }
                }
            }
            return _toRet;
        } else {
            return input;
        }
    };
});

另请注意对您的 ngRepeat 语法的更改。

ng-repeat="data in filtered = list | filter:search.name | customFilter:search.language | startFrom:(currentPage-1)*entryLimit | limitTo:entryLimit"

http://jsfiddle.net/doublekid/5Bs3h/

于 2013-06-04T14:38:06.200 回答