1

ng-repeat リストにページネーションを実装した後 (フィルタリング後に AngularJS のページネーションを更新します)

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

カスタムフィルターに問題があります

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

複数の言語で検索するには、このフィルターが必要です (2 つ以上の言語を選択します)。filtered = (list | filter:search)データを listのデータに置き換えると、機能していることがわかります。しかし、ページネーションのためにフィルタリングする必要があります。

jsFiddle: http://jsfiddle.net/StinsonMaster/SuEX6/4/ (前のスレッドのフィドルに基づく)

4

2 に答える 2

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 に答える
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 に答える