AngularJS ng-repeat过滤器性能:自定义过滤器或ng-show / hide

时间:2014-12-28 00:39:03

标签: javascript angularjs performance sorting filtering

TL;博士 在Angular中过滤大型列表的最佳方法是什么?


这主要是关于表现。

我有一组用ng-repeat列出的对象。将有数百到数千个项目。我现在需要根据以下任一项过滤列表:

  • 甲。一个简单的属性(例如数字)
  • B中。多个条件(某种表达)

最佳选择:

  1. 使用自定义过滤器
  2. 使用ng-show / ng-hide
  3. 使用ng-if
  4. 根本不在视图中过滤 - 也许使用service + controller(?)
  5. 使用ReactJS(?)

  6. 有关用例的详细信息:

    • 我想用〜一次绑定绑定大多数对象的属性,尽管有些属性需要双向绑定(排序得分)
    • 列表将在与用于过滤的字段无关的字段上动态排序。过滤掉的项目可能不应包含在排序
    • 过滤需要是动态的

    所以我找到了Ben Nadel的帖子http://www.bennadel.com/blog/2487-filter-vs-nghide-with-ngrepeat-in-angularjs.htm但我的问题是为了解决一般的标准用例。

1 个答案:

答案 0 :(得分:2)

如果您使用的是Angular 1.3,则角度滤镜已针对性能进行了优化。它们现在是无状态的,并且在原始数据源发生更改之前不执行(或重新评估)。对于旧版Angular过滤器,情况并非如此。在此处了解这些无状态过滤器http://blog.thoughtram.io/angularjs/2014/11/19/exploring-angular-1.3-stateful-filters.html

对于旧版本,如果您可以在控制器或服务中进行过滤,并且始终将过滤后的结果绑定到视图,那会更好。这是关于保留诸如$scope.filteredItem=[];之类的数组,并在过滤条件改变时更新它。 您仍然可以使用$filter服务在代码中使用角度过滤器。