Angular2/Ionic2-防止导航时控制器重新加载

Angular2/Ionic2-防止导航时控制器重新加载,angular,typescript,ionic2,ionic3,Angular,Typescript,Ionic2,Ionic3,所以我首先做了一个使用标签的应用程序版本。使用,当我导航到一个页面时,视图将第一次启动一个(从api中提取数据并显示),当我离开它并返回时,无需重新加载任何内容,基本上保持原样,因为控制器没有再次运行 我已经实现了,而且它的设置似乎很好。但例如,当导航到我的播客页面并播放一首曲目时,当我离开时,该曲目将继续播放(这对我来说很好)。然而,当我再次导航到播客页面时,它就像一个全新的实例:曲目显示为未播放,开始时显示进度条,然后我可以再次按play,同时播放该曲目的两个实例。基本上,整个控制器启动一个

所以我首先做了一个使用标签的应用程序版本。使用,当我导航到一个页面时,视图将第一次启动一个(从api中提取数据并显示),当我离开它并返回时,无需重新加载任何内容,基本上保持原样,因为控制器没有再次运行

我已经实现了,而且它的设置似乎很好。但例如,当导航到我的播客页面并播放一首曲目时,当我离开时,该曲目将继续播放(这对我来说很好)。然而,当我再次导航到播客页面时,它就像一个全新的实例:曲目显示为未播放,开始时显示进度条,然后我可以再次按play,同时播放该曲目的两个实例。基本上,整个控制器启动一个新实例。因此,这也意味着每次我导航到页面时都会发出HTTP get请求(如果我为此设置某种缓存,我想这不是一个问题,但我的主要烦恼是播客进度/状态问题)

这里有什么建议吗


谢谢

一般来说,我会使用共享服务来避免这种情况发生。通过使用服务并将其包含在应用程序组件的providers数组中,我们可以在其中存储一些信息,并且它将在整个应用程序中可用(它将是一个单例)

但让我们一步一步来:

但例如,当导航到我的播客页面并播放曲目时, 当我离开时,轨迹会继续播放(这可以通过 我)

在这种情况下,您可以使用
didlave()
方法,以便停止跟踪。您可以找到有关该方法的更多信息。我不仅会停止这首歌,还会在我们的共享服务(例如)中存储你正在听的歌的当前时间点,可能还有你正在听的歌的id

然而,当我再次浏览到播客页面时,它就像一个整体 新实例:显示为未播放的曲目,进度条 在开始时,我可以再次按play键,并显示两个实例 那首曲子同时播放。基本上整个控制器都会开火 创建一个新实例

因此,如果您再次返回该页面,您可以使用
willEnter()
方法检查歌曲的id是否与您之前收听的相同,如果相同,您可以使用存储的信息设置播客状态(可能使用存储的值设置进度条,显示暂停按钮而不是播放按钮,等等)

这也意味着我的HTTP get请求 每次我导航到该页面时(这不是一个 我想,如果我为此设置某种缓存,我的 主要烦恼是播客进度/状态问题)

您还可以通过使用歌曲的Id来减少http请求的数量。如果您现在想要收听的播客与您之前收听的播客相同,那么您可以避免执行http请求

道歉如果其中一些项目在您的应用程序环境中没有意义,它们只是一些可能帮助您解决这些问题的想法