[英]AngularJS how to do lazy load of images with filters
我正在开发一个角度应用程序,其中主页面加载1000个图像,但用户一次只能查看20个。 我的列表中还有几个过滤器,因此可以根据不同的标准对其进行过滤和排序。
我已经尝试过http://binarymuse.github.io/ngInfiniteScroll/#和http://ngscroller.herokuapp.com/,但似乎都没有那么好用。
Ngscroller确实可以工作,但是当我尝试应用我的过滤器时,它会中断。 我也更喜欢这个,因为它不需要我包含jquery。 有没有可以做我需要的简单指令? 我正在尝试加速我的网页,但如果有一些已经完成此操作的东西,我不想重新发明轮子。
这是我对ngScroller的尝试: http ://plnkr.co/edit/r0uhV3OxT2USxmrBQk22?p = preview
<div class="content" ng-controller="MainController" ng-scroller="content">
<ul class="list" ng-scroller-repeat="item in items | filter:idOver500k | orderBy:predicate:!reverse">
<li class="item">{{item.text}}</li>
</ul>
</div>
滚动工作没有过滤器和orderBy,但我正在寻找一种方法来处理所有情况。
加载页面至少需要3秒才能删除图像。 看起来只有在获得所有图像时才加载角度。 处理这个问题的最佳方法是什么?
谢谢!
使用ng-infinite-scroll进行演示: http : //plnkr.co/edit/O5w0Fp
ng-infinite-scroll与ng-scroller有不同的机制。 当用户滚动到底部时,无限滚动将触发loadMore
函数。 您可以自己定义loadMore
函数。
我创建了一个lazyLoad
过滤器,只返回由counter
变量管理的部分过滤项。 滚动到底部时, counter
将加1以从lazyLoad
过滤器返回更多项目。
当用户通过参数更改订单时, counter
将重置为1。
当counter
等于1
,它将加载前30个项目。
如果document.body
的高度小于window
的高度,则可能有问题,因为该方式文档将无法滚动,因此不会触发scroll
事件。 您必须手动检查高度并相应地触发loadMoreItems
。
页面初始化或counter
重置时会出现此问题。
我在重置计数器后添加了adjustCounter
函数来运行。 ng-infinite-scroll将在内部页面加载时处理此问题。
在没有修复ngScroller的情况下,这似乎无法使用动态过滤器。
有问题的代码似乎在ng.Scroller.prototype.compile
函数中:
var exp = carousel.getAttribute('ng-scroller-repeat');
var keys = exp.split(/\s+in\s+/);
其中ngScroller基本上拆分属性而不查看过滤器等。
一个可能的解决方法就像@Daiwei建议并在绑定之前过滤。 这不是一个糟糕的解决方案,因为无论如何这要快得多。
app.controller('MainController', function ($scope) {
$scope.allItems = generateItems(1000);
$scope.items = $scope.allItems.reduce(function(previous, item){
if (item.id > 500000)
{
previous.push(item);
}
return previous;
},[]);
});
有关示例,请参阅此Plunker 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.