AngularJS过滤器控制器中的大型集合,不带$watch()

AngularJS过滤器控制器中的大型集合,不带$watch(),angularjs,angularjs-ng-repeat,Angularjs,Angularjs Ng Repeat,我正在开发一个需要在屏幕上显示大量数据的应用程序。此外,该数据采用表格格式,不幸的是,这会导致页面上出现几次ng重复。因此,为了加快速度,我在控制器中预先过滤数据,而不是视图 例如,与其做这样的事情: app.controller('PersonController', function($scope, People) { $scope.items = People.query(); }); <div ng-repeat="item in items | orderBy:'na

我正在开发一个需要在屏幕上显示大量数据的应用程序。此外,该数据采用表格格式,不幸的是,这会导致页面上出现几次ng重复。因此,为了加快速度,我在控制器中预先过滤数据,而不是视图

例如,与其做这样的事情:

app.controller('PersonController', function($scope, People) {
    $scope.items = People.query(); 
});

<div ng-repeat="item in items | orderBy:'name'"></div>
app.controller('PersonController', function($scope, People) {
    $scope.items = People.query();
    $scope.filteredItems = $filter('orderBy')($scope.items, 'name')
});

<div ng-repeat="item in filteredItems"></div>
但是,这并不理想,因为$scope.items集合非常大,并且此$watch调用将非常昂贵


有人能帮我找到更好的方法吗?任何帮助都将不胜感激

如果在控制器之外修改了$scope.items,则需要使用$watch来检测阵列中的更改。如果您只关心添加\删除,您可以查看$scope.items.length是否有一个示例显示性能问题?我在超过500000行的数据集上使用了ng repeat进行可伸缩性测试,ng repeat完成的筛选和排序非常快。DOM呈现和总监视计数失控,因此需要在表上进行分页或虚拟滚动。
$scope.$watch 'items', (->
    $scope.filteredItems = $filter('orderBy')($scope.items, 'name')
), true