在ng-repeat中链接过滤器

时间:2015-03-13 20:06:52

标签: angularjs

我有一个需要在ng-repeat中绑定的大型列表,性能很差,所以我找到了这个链接:

http://tech.small-improvements.com/2013/09/10/angularjs-performance-with-large-lists/

并使用自定义startFrom过滤器实现了相同的分页:

angular.module('myApp').filter('startFrom', function () {
    return function (input, start) {
        if (input) {
            return input.slice(start);
        }
    };
});

这提高了性能,使其达到了可接受的程度,但它打破了之前我正在进行的过滤。现在,如果我想搜索某个项目,那么只有我在包含该项目的页面上才能使用该项目。我的理解是过滤器应该可以链接,但如果我这样做:

<tr ng-repeat="r in foo| filter:query:strict | startFrom: currentPage * pageSize | 
    limitTo:pageSize | orderBy:['type','code']">

首先应用orderBy,然后startFrom,最后只应用filter。我最初在filter之后startFrom获得了相同的结果。那么我该如何才能在首次应用startFrom后才应用filter

1 个答案:

答案 0 :(得分:0)

您可以想象currentPage * pageSize会返回一些像10这样的值。这意味着即使您的过滤器适用于它们,也会跳过前10个项目。当搜索更改为包含起始项时,startFrom过滤器必须更新到第0页。

您可以通过观察query的更改并重置页面来执行此操作,以便显示数组的早期值。