链接过滤器

问题描述:

我有一个大名单,我需要在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。我原本在startFrom之后有filter,结果相同。那么我怎样才能让这个startFrom之后第一次申请filter

+0

'currentPage * pageSize'可能不会在'query'时更新。 – 2015-03-13 20:10:35

+0

@ExplosionPills:这会很有意义。我想我需要一个'$ watch'。 – 2015-03-13 20:15:04

+0

@ExplosionPills:其实,就是这样。当过滤器改变并且它工作时,我在我的'query'上加上了一个监视器来将'currentPage'重置为'0'。如果您想为此添加答案,我会接受它。 – 2015-03-13 20:21:31

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

您可以通过观察对query的更改并重置页面来做到这一点,以便显示数组的较早值。