Angularjs一遍又一遍的“ ng-repeat”过滤器,它过滤掉了整个数组

时间:2018-07-11 11:10:27

标签: angularjs angularjs-ng-repeat

数组变量不断增加。每当添加新元素时,都会触发过滤器。数组过滤所有元素。由于我重复的数组包含实时数据,因此添加了连续数据。这会导致性能下降。随着数组大小的增加,筛选器开始失败。

ng-repeat="data in col.columnData
                  | filter:{body:col.UIFilter.match}
                  | filter:repostQuery(col.UIFilter.repost)
                  | filter:mediaQuery(col.UIFilter.media)
                  | orderBy:'iPostedTime':'+'
                  | limitTo:col.columnSettingsObject.listLimit
                  track by data.id"

(数组大小>〜1000}

需要做的是在应用过滤器之后过滤添加的元素,而不是在添加元素时过滤整个索引。我该怎么办?

1 个答案:

答案 0 :(得分:0)

您不应添加太多过滤器。另外,您也不应该在大型数据集上使用过滤器,因为过滤器会为每个条目添加一个观察者。

5个过滤器1000个条目= 5000个观察者=极其缓慢

您应该只针对每个站点200位观察者,并且摘要周期最长为2ms。最好的方法是在将数据插入col.columnData之前对其进行过滤。 您可以通过以下方式实现此目标:

let temp = your_original_dataset;
temp = $filter('filter')(temp, {body:col.UIFilter.match});
temp = $filter('filter')(temp, repostQuery(col.UIFilter.repost));
temp = $filter('filter')(temp, mediaQuery(col.UIFilter.media));
temp = $filter('orderBy')(temp, 'iPostedTime', '+');
temp = $filter('limitTo')(temp, col.columnSettingsObject.listLimit);
col.columnData = temp;

ng-repeat="data in col.columnData track by data.id"

注意(未经测试)。我不知道$ filter的确切写法只是查找它。 希望这会有所帮助