假设有一个位于/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行......
什么是好习惯?也许另一个解决方
答案 0 :(得分:1)
这是一种欺骗,但是如何使用模态(http://ionicframework.com/docs/api/service/ $ ionicModal /)来渲染细节呢?