1

所以我首先做了一个使用标签的应用程序版本。使用tabs,当我导航到一个页面时,视图将第一次启动(从 api 拉数据并显示它),当我离开它并返回时,不需要重新加载,它基本上是离开的这是因为控制器没有再次运行。

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

这里有什么提示或建议吗?

谢谢!

4

1 回答 1

1

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

但是让我们一步一步来:

但是例如当导航到我的播客页面并播放曲目时,当我导航离开时,曲目继续播放(这对我来说很好)。

在这种情况下,您可以使用该didLeave()方法,因此您可以停止跟踪。您可以在此处找到有关该方法的更多信息。我不仅会停止曲目,还会将您正在收听的曲目的当前时间点以及您正在收听的歌曲的 ID 存储在我们的共享服务中(例如)。

但是,当我再次导航到播客页面时,它就像一个全新的实例:曲目显示为未播放,进度条在开始时,然后我可以再次按下播放并播放该曲目的两个实例同时。基本上整个控制器都会启动一个新实例。

所以如果你再次回到那个页面,你可以使用该willEnter()方法检查歌曲的id是否和你之前听的一样,如果相同,你可以使用存储的信息来设置播客状态(也许设置带有您存储的值的进度条,显示暂停按钮而不是播放按钮,等等)。

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

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

如果其中一些项目在您的应用程序上下文中没有意义,我们深表歉意,它们只是一些可以帮助您解决这些问题的想法。

于 2016-08-11T21:03:32.747 回答