Angular2/Ionic2 - 防止控制器在导航上重新加载
因此,我首先完成了使用选项卡的应用程序版本。使用tabs,当我导航到一个页面时,视图将首次启动一个(从api中提取数据并显示它),当我离开它并返回时,什么都不需要重新加载,它基本上是左侧的这是因为控制器没有再次运行。Angular2/Ionic2 - 防止控制器在导航上重新加载
我自从实施了Ionic2 side menu starter,它似乎设置好了。但是,例如,当导航到我的播客页面并播放曲目时,当我离开时,曲目继续播放(这对我来说很好)。但是,当我再次导航到播客页面时,它就像是一个全新的实例:播放的曲目显示为不播放,开始时播放进度条,然后我可以再次按播放,该曲目的两个实例播放与此同时。基本上整个控制器启动一个新的实例。所以这也意味着我每次浏览页面时都会收到HTTP get请求(如果为此设置某种缓存,那么这个问题就不那么严重了,但是我主要的烦恼是播客进度/状态问题)。
任何提示或建议吗?
谢谢!
一般来说,我会使用共享服务来避免发生这种情况。通过使用服务和包括它的应用程序组件的供应商阵列中我们可以存储在那里的一些信息,这将是在整个应用程序可用的(这将是一个单身)
但是让我们做到这一步一步:
但是例如,当浏览到我的播客页面,播放曲目, 当我导航离开,轨道继续(通过 这是好的我)玩。
在这种情况下,您可以使用didLeave()
方法,因此您可以停止该轨道。你可以找到关于该方法的进一步信息here。我不仅会停止曲目,还会将我们的共享服务(例如)存储在您正在收听的曲目的当前时间点,并且可能还会存储您正在收听的歌曲的ID。
然而,当我再次导航到播客页面,它喜欢它的整体 新实例:轨道显示在开始不玩,进度条 ,我然后能按下播放键再次和两个同时跟踪播放的实例 。基本上,整个控制器启动一个新的实例,启动 。
所以,如果你回到那个页面再次,你可以使用willEnter()
方法来检查,如果歌曲的ID是一样的,你之前在听,如果它是一样的,你可以使用存储的信息设置播客状态(可以用您存储的值设置进度条,显示暂停按钮而不是播放按钮,等等)。
因此,这也意味着我的HTTP GET请求 正在尽一切我浏览到的页面(这是更少的 问题,我想,如果我设置了某种形式的缓存为的时间,但我 主要烦恼是播客进度/状态问题)。
您还可以减少使用歌曲ID所做的http请求数量。如果您现在要收听的播客与您之前收听的播客相同,也许可以避免执行http请求。
如果其中一些项目在您的应用程序的上下文中没有意义,他们只是一些想法,可以帮助您解决这些问题。