我有一个需要在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
?
答案 0 :(得分:0)
您可以想象currentPage * pageSize
会返回一些像10这样的值。这意味着即使您的过滤器适用于它们,也会跳过前10个项目。当搜索更改为包含起始项时,startFrom
过滤器必须更新到第0页。
您可以通过观察query
的更改并重置页面来执行此操作,以便显示数组的早期值。