所以我第一次做了一个使用标签的应用程序版本。使用tabs,当我导航到一个页面时,视图将首次启动(从api中提取数据并显示它),当我离开它并返回时,什么都不需要重新加载,它基本上保持原样,因为控制器没有再次运行。
我已经实施了Ionic2 side menu starter,似乎设置得很好。但是,例如当导航到我的播客页面并播放曲目时,当我离开时,曲目继续播放(这对我很好)。然而,当我再次导航到播客页面时,它就像一个全新的实例:显示为不播放的曲目,开始时的进度条,然后我可以再次按播放和该曲目播放的两个实例同时。基本上整个控制器都会启动一个新实例。所以这也意味着每次我导航到页面时都会发出我的HTTP get请求(如果我为此设置某种缓存,我认为这不是问题,但我主要的烦恼是播客进度/状态问题)。
这里有任何提示或建议吗?
谢谢!
答案 0 :(得分:1)
一般来说,我会使用共享服务来避免这种情况发生。通过使用服务和将它包含在App组件的提供者数组中,我们可以存储一些信息,它将在整个应用程序中可用(它将是单例)
但让我们一步一步地做到这一点:
但是例如当导航到我的播客页面并播放曲目时, 当我离开时,赛道继续发挥(这很好 我)。
在这种情况下,您可以使用didLeave()
方法,以便停止跟踪。您可以找到有关该方法here的更多信息。我不仅要停止曲目,还要在我们的共享服务(例如)中存储您正在收听的曲目的当前时间点,也可能是您正在收听的歌曲的ID。
然而,当我再次浏览播客页面时,它就像一个整体 新的实例:显示为不播放的曲目,进度条 一开始,我就可以再次按下播放和两个实例 那个轨道同时播放。基本上整个控制器都会发射 一个新的实例。
因此,如果您再次返回该页面,可以使用willEnter()
方法检查歌曲的ID是否与您之前听过的相同,如果它相同,您可以使用存储的信息设置播客状态(可以使用您存储的值设置进度条,显示暂停按钮而不是播放按钮,等等。)
所以这也意味着我的HTTP get请求 每次我导航到页面时都会被创建(这不是一个 问题我想如果我为此设置某种缓存,但是我的 主要的烦恼是播客进度/状态问题。)
您还可以减少使用歌曲ID的http请求数量。如果您现在要播放的播客与您正在收听的播客相同,则可以避免执行http请求。
如果其中某些项目在您的应用程序环境中没有任何意义,那么它们只是一些可以帮助您解决这些问题的想法。