无限滚动和 limitTo 不在 ng-repeat 中显示元素
Infinite-scroll and limitTo doesn't display elements in ng-repeat
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 演示问题
我发现了你的问题。
这是一个有效的 jsfiddle:https://jsfiddle.net/3Lsu2ojz/
你的问题是你使用的是 ng-show 而不是过滤器..
ng-show可以理解为'put display: none !important; on this element if condition'
因此,在无限滚动指令中仍会考虑到它,因为元素确实存在并且 limitTo 确实发挥了作用。
您可以使用自定义过滤器,在您的情况下:
$scope.searchString = {'ShowMe': true }
成功了。
还可以考虑使用此语法代替您的语法:
powerplant in powerPlantsFilter = ( selectablePowerPlants |
filter:searchString |
limitTo: numberToDisplay) track by powerplant.ID"
这里的 powerPlantsFilter 不是范围内的集合,而是通过 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 演示问题
我发现了你的问题。
这是一个有效的 jsfiddle:https://jsfiddle.net/3Lsu2ojz/
你的问题是你使用的是 ng-show 而不是过滤器..
ng-show可以理解为'put display: none !important; on this element if condition'
因此,在无限滚动指令中仍会考虑到它,因为元素确实存在并且 limitTo 确实发挥了作用。
您可以使用自定义过滤器,在您的情况下:
$scope.searchString = {'ShowMe': true }
成功了。
还可以考虑使用此语法代替您的语法:
powerplant in powerPlantsFilter = ( selectablePowerPlants |
filter:searchString |
limitTo: numberToDisplay) track by powerplant.ID"
这里的 powerPlantsFilter 不是范围内的集合,而是通过 limitTo 和过滤器的规范动态创建的集合。