tl;博士 在 Angular 中过滤大型列表的最佳方法是什么?
这主要是关于性能。
我有一个用 ng-repeat 列出的对象数组。将会有数百到数千个项目。我现在需要根据以下任一条件过滤列表:
- A.一个简单的属性(例如数字)
- B.多个条件(某些表达式)
什么选项最好:
- 使用自定义过滤器
- 使用 ng-show/ng-hide
- 使用 ng-if
- 根本不要在 View 中进行过滤——也许使用服务+ Controller (?)
- 使用 ReactJS (?)
有关用例的详细信息:
- 我想用::一次绑定(bind)来绑定(bind)大多数对象的属性,尽管有些属性需要双向绑定(bind)(排序分数)
- 列表将根据独立于用于过滤的字段的字段进行动态排序。过滤掉的项目可能不应该包含在排序中
- 过滤需要是动态的
所以我找到了 Ben Nadel 的帖子 http://www.bennadel.com/blog/2487-filter-vs-nghide-with-ngrepeat-in-angularjs.htm但我的问题是为了解决一般的标准用例。
最佳答案
如果您使用的是 Angular 1.3,Angular 过滤器已针对性能进行了优化。它们现在是无状态的,并且在原始数据源更改之前不会执行(或重新评估)。旧版本的 Angular 过滤器并非如此。在此处了解这些无状态过滤器 http://blog.thoughtram.io/angularjs/2014/11/19/exploring-angular-1.3-stateful-filters.html
对于旧版本,如果您可以在 Controller 或服务中进行过滤,并始终将过滤结果绑定(bind)到 View ,那就更好了。这是关于保留一个数组,例如 $scope.filteredItem=[];
,并在过滤条件发生变化时更新它。
您仍然可以使用 $filter
服务在代码中使用 Angular 过滤器。
关于javascript - AngularJS ng-repeat过滤器性能: custom filter or ng-show/hide,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27672784/