AngularJs /滚动无限和后退按钮

时间:2014-09-23 09:43:49

标签: javascript angularjs web-applications scroll ionic-framework

假设有一个位于/items的网页,列出了所有可用的项目 当用户点击一个项目时,浏览器会显示/items/:itemId并显示该项目的详细信息。

当然,物品清单可能非常大 这就是为什么我使用scroll infinite feature from Ionic(我基于Angular使用的框架)。

然而,正如许多开发人员所知,处理从/items/:itemId/items的“后退按钮”是棘手的,因为Angular的控制器在页面转换期间被销毁,然后在再次加载列表页面时重建。
因此,在点击项目的详细信息之前,丢失滚动位置和已加载的确切项目。

我想到了一些解决方案,但我犹豫不决,因为它们都有“缺点”:

  • 在即将显示项目详细信息之前,将实际加载的项目(完整项目)存储在$cacheFactory(Angular的缓存或localStorage)中。
    因此,当按下后退按钮时(在详细页面上),/items的控制器可以从缓存中初始化数据,此外可以轻松地“记住”滚动位置。
    缺点是缓存中的数据可能是陈旧的......

  • “无需在缓存中存储任何已加载的项目!”只需在缓存或localStorage中存储实际加载的块数 例如,我的REST API允许按10检索项目 如果用户被加载到第二个块(最多20个元素),则缓存中的变量将包含该值,然后控制器可以初始化为所有20个项目。
    缺点是它会涉及到服务器的多个请求。实际上,如果用户加载了30个块,控制器将需要对服务器进行30次调用... 我可以自定义服务器处理的块的大小,但是一个项目很重(几个长文本等等。任何东西的列表),解释了为什么我限于一个相对较小的数字。

  • 使用双向滚动(顶部和底部),这样DOM中总共有10个项目。我只需要存储已加载的最后一个块数,以便重新加载它 缺点:我必须自己编写我的指令(可能是这样),因为目前没有Angular(也不是Ionic)指令。
    而且我认为双向仅在处理非常大的列表时才有用:超过2000行,以减轻DOM。
    在我的大多数情况下,我预计不会超过400行......

什么是好习惯?也许另一个解决方

1 个答案:

答案 0 :(得分:1)

这是一种欺骗,但是如何使用模态(http://ionicframework.com/docs/api/service/ $ ionicModal /)来渲染细节呢?