2017-06-29 64 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和過濾器的規格創建。