如何在使用“ng-show”进行过滤时获取AngularJS中过滤数据的总长度?

3
为了提高性能,我修改了以下代码逻辑: 修改前 该代码在过滤大量数据(约2000或更多)时性能非常低。
<tr ng-repeat="item in ctrl.filteredReport = (ctrl.updatedData | 
    filter:ctrl.filterByQuarter:strict | filter:searchText)">

修改后

这段代码显著提高了性能。

<tr ng-repeat="item in ctrl.updatedData" 
    ng-show="([item] | filter:ctrl.filterByQuarter | filter:ctrl.searchText).length > 0">

问题

修改之后,问题是我无法获取表格中显示的已过滤报告的长度

在修改之前,我可以通过 ctrl.filteredReport.length 获取已过滤报告的长度。

仅供参考

我已经尝试过 track by,但性能并没有像ng-show那样提高。

如果需要更多信息来使问题更清晰,请让我知道。


嗨@Bijay,我认为你需要创建一个自定义过滤器,就像这里提到的那样。https://stackoverflow.com/questions/34812402/get-the-length-of-list-shown-by-ng-show - Alexis
1个回答

1
<li ng-repeat="item in ctrl.filteredReport = (ctrl.updatedData | 
filter:ctrl.filterByQuarter:strict | filter:searchText)"> 

它可以在眨眼之间从DOM中删除/添加项目,非常酷。

然而,对于大量数据,速度较慢。但是使用ng-show来隐藏/显示元素而不是删除它们,可以获得相同的结果并提高性能。

您可以使用track by获取索引,并按照@Alex Toby所述编写自定义函数。

<li ng-repeat="item in ctrl.filteredReport = (ctrl.updatedData | 
    filter:ctrl.filterByQuarter:strict | filter:searchText) track by $index"> 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接