【发布时间】:2013-01-11 15:08:59
【问题描述】:
所以我正在尝试使用 AngularJS 创建一个无限滚动表,类似于:http://jsfiddle.net/vojtajina/U7Bz9/
我遇到的问题是,在 jsfiddle 示例中,如果我一直滚动直到获得一百万个结果,浏览器就会慢到爬行,不是吗?因为现在在 $scope.items 中会有 1,000,000 结果。例如,如果我在 $scope.items 中一次只有 1000 结果,而我正在查看的结果恰好在这些 1000 中,那就更好了。
示例用例:页面加载,我看到了第一个10 结果(来自1,000,000)。尽管我只看到10,但实际上已经加载了第一个1000 结果。然后我滚动到列表的最底部以查看最后的10 项目。如果我再次向上滚动到顶部,我希望顶部的10 结果将不得不从服务器再次加载。
我有一个使用 ExtJS 完成的项目,情况类似:一个包含数千个结果的无限滚动列表。 ExtJS 处理这个问题的方法是加载当前页面的结果,然后预加载几个额外的结果页面。然而,在任何时候,只有10 页的结果存储在本地。
所以我想我的问题是如何在 AngularJS 中实现它?我知道我没有提供太多代码,所以我不希望人们只给出编码的答案,但至少给出一些方向的建议。
【问题讨论】:
-
为什么 Angular 实现与 ExtJS 实现有那么大的不同?换句话说,ExtJS 实现的哪一部分在移植到 Angular 时遇到了困难?看起来你仍然会预加载,只是调整 $scope.items 中的内容,而不是调整 DOM 中的内容(我猜 ExtJS 实现就是这样做的)。而不是 DOM 操作,只需进行 $scope 操作并让 Angular 自动更新视图。
-
@MarkRajcok 既然您已经说过这似乎很明显:P 但是有一件事我仍然不确定该怎么做。在 ExtJS 中,无限滚动列表的滚动条给人的印象是所有数据都已加载,即我可以将滚动条移动到底部,然后我会看到最后一项。你会如何在 AngularJS 中模仿这一点?
-
这会很困难,因为 Angular 控制着视图的显示,而当前滚动条的大小无疑与 $scope.items 的当前大小有关。您可能需要编写自己的指令来实现自定义可滚动容器(如果您真的认为需要此功能)。
-
无限滚动最近普遍受到审查,因为有很多问题:可用性、搜索引擎优化、流量,以及当您到达“1,000,000”行时与 DOM 相关的性能问题。也许是时候重新考虑实施了。
-
我觉得react.js可以用在这样的场景中
标签: javascript angularjs