2017-06-29 65 views
1

ng-repeat中的元素通过切换单个元素上的布尔值来过滤。无限滚动和limitTo不会显示ng-repeat中的元素

<div class="message-list" infinite-scroll="loadMore()" infinite-scroll-distance="1" infinite-scroll-parent="true"> 
    <div ng-repeat="powerplant in powerPlantFilter = (selectablePowerPlants | filter:searchString | limitTo: numberToDisplay) track by powerplant.ID"> 
      <div class="message" ng-show="powerplant.IsSelected === false && powerplant.IsInSegment === false"> 
          ...  
      </div> 
    </div> 
</div> 

我的问题是,如果我申请一定的过滤器,应显示的第一要素,是在列表编号659。 如果我没有向下滚动,所以numberToDisplay高于659,则列表中不会显示任何元素。 numberToDisplay的初始值为35,并且像这样递增。

$scope.loadMore = function() { 
    if ($scope.numberToDisplay + 20 < $scope.selectablePowerPlants.length) { 
     $scope.numberToDisplay += 20; 
    } else { 
     $scope.numberToDisplay = $scope.selectablePowerPlants.length; 
    } 
}; 

如何解决此问题?

JsFiddle演示问题

+0

你可以请一个工作jsfiddle包括图书馆,所以我可以尝试一些想法? – Alburkerk

+0

当然,我会尽快完成一个 –

+0

JsFiddle补充说。 –

回答

2

,我发现你的问题。

这里是一个工作的jsfiddle:https://jsfiddle.net/3Lsu2ojz/

您的问题,您正在使用的,而不是一个过滤器NG出现什么..

NG出现可以理解为“把显示:无重要;!在这个元素上如果条件'

因此,它仍然会考虑在无限滚动指令中,因为元素真的在这里,并且limitTo实际上完成了它的工作。

您可以使用自定义过滤器,你的情况:

$scope.searchString = {'ShowMe': true } 

的伎俩。

还要考虑使用这种语法,而不是你的:

powerplant in powerPlantsFilter = (selectablePowerPlants | 
           filter:searchString | 
           limitTo: numberToDisplay) track by powerplant.ID" 

哪里powerPlantsFilter在这里不是从范围集合,但集合动态地limitTo和过滤器的规格创建。