【发布时间】:2018-03-09 00:24:21
【问题描述】:
我有一个带有完美滚动条的 UI 布局来呈现项目列表。我需要在可滚动部分中显示 1600 个项目(不限制以任何分页显示的项目数量),以便用户可以一次滚动所有项目(这是对我的要求,我对此控制较少) .
渲染此视图的角度模板如下:
<my-scrollable-section>
<div
ng-class="myCtrl.itemId == item.itemId ? 'item-active-background' : ''"
ng-click="myCtrl.itemClickHandler(item)"
ng-repeat="item in myCtrl.items | filter:myCtrl.search track by item.itemId">
<span>{{item.name}}</span>
<div ng-repeat="(key, value) in ::item.models">
<span>{{::value}}</span>
</div>
<div ng-repeat="(key, value) in ::item.frameworks">
<span>{{::value}}</span>
</div>
</div>
</my-scrollable-section>
此重复中的过滤器链接到此视图正上方的搜索栏,以缩小显示的项目范围。
现在的问题是:
- 页面不会立即加载并冻结 5-8 秒。观察者的数量不是造成这种情况的原因,因为我尝试了一次性绑定以使观察者数量低于 1500。
- 页面加载后,滚动速度非常慢,看起来一点也不友好。
- 我尝试建议分页来限制一次呈现的项目数量,但如前所述,我几乎无法控制要求,并且要求所有项目都出现在可滚动列表中。
这些负载和性能问题可以用 Angular 解决吗?请不要建议无限滚动,因为即使我们使用无限滚动,最后,一旦所有项目都在页面上,UI会再次变慢。
【问题讨论】:
-
所以你需要虚拟卷轴。采取任何你喜欢的实现。
-
如果我选择虚拟滚动,它会干扰我已经用于滚动的完美滚动。另外,这是否会以某种方式限制项目以使页面加载更快一些?
-
如果需要,您可以使用 limitTo 并在 ng-repeat 中添加搜索功能。
-
第 3 点“我尝试建议分页以限制一次呈现的项目数量,但如前所述,我几乎无法控制要求,并且要求所有项目都存在可滚动列表。”。
-
尝试延迟加载滚动?假设可以在视口中放置 10 个项目,然后最初加载 20 个项目。滚动开始加载接下来的 20 个项目。
标签: angularjs angularjs-directive