Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS ng重复过滤器性能:自定义过滤器或ng显示/隐藏_Javascript_Angularjs_Performance_Sorting_Filtering - Fatal编程技术网

Javascript AngularJS ng重复过滤器性能:自定义过滤器或ng显示/隐藏

Javascript AngularJS ng重复过滤器性能:自定义过滤器或ng显示/隐藏,javascript,angularjs,performance,sorting,filtering,Javascript,Angularjs,Performance,Sorting,Filtering,tl;dr 什么是过滤大列表的最佳方式 这主要是关于性能 我有一个对象数组,我用ng repeat列出。将有数百到数千件物品。我现在需要根据以下任一项筛选列表: A.单一、简单的属性(如数字) B.多个条件(某些表达式) 最好的选择是: 使用自定义过滤器 使用ng show/ng hide 使用ng if 根本不在视图中进行筛选--可能使用服务+控制器(?) 使用ReactJS(?) 有关用例的详细信息: 我想用::一次性绑定绑定大多数对象的属性,尽管有些属性需要双向绑定(排序分数)

tl;dr 什么是过滤大列表的最佳方式


这主要是关于性能

我有一个对象数组,我用ng repeat列出。将有数百到数千件物品。我现在需要根据以下任一项筛选列表:

  • A.单一、简单的属性(如数字)
  • B.多个条件(某些表达式)
最好的选择是:

  • 使用自定义过滤器
  • 使用ng show/ng hide
  • 使用ng if
  • 根本不在视图中进行筛选--可能使用服务+控制器(?)
  • 使用ReactJS(?)

  • 有关用例的详细信息:

    • 我想用::一次性绑定绑定大多数对象的属性,尽管有些属性需要双向绑定(排序分数)
    • 列表将在独立于用于筛选的字段的字段上动态排序。筛选出的项目可能不应包括在排序中
    • 过滤需要是动态的

    所以我找到了Ben Nadel的帖子,但我的问题是为了解决一般的标准用例。

    如果您使用的是Angular 1.3,那么Angular过滤器已经针对性能进行了优化。它们现在是无状态的,在原始数据源更改之前不会执行(或重新计算)。旧版本的角度过滤器并非如此。在这里了解这些无状态过滤器

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

    我实际上需要过滤器是有状态的,因为过滤器将依赖于服务。我想我应该添加一些范围滑块,并通过控制器变量将值连接到服务属性。因此,对于无状态筛选器,这将不起作用。也许还有另一种方法?依赖后端服务的有状态过滤器可能是一个巨大的性能杀手。对于有状态过滤器,它们在每个摘要周期上重新计算。最好在分配给视图之前过滤数据。它所依赖的不是后端服务,而是客户端服务。