2016-08-11 74 views
1

因此,我首先完成了使用選項卡的應用程序版本。使用tabs,當我導航到一個頁面時,視圖將首次啓動一個(從api中提取數據並顯示它),當我離開它並返回時,什麼都不需要重新加載,它基本上是左側的這是因爲控制器沒有再次運行。Angular2/Ionic2 - 防止控制器在導航上重新加載

我自從實施了Ionic2 side menu starter,它似乎設置好了。但是,例如,當導航到我的播客頁面並播放曲目時,當我離開時,曲目繼續播放(這對我來說很好)。但是,當我再次導航到播客頁面時,它就像是一個全新的實例:播放的曲目顯示爲不播放,開始時播放進度條,然後我可以再次按播放,該曲目的兩個實例播放與此同時。基本上整個控制器啓動一個新的實例。所以這也意味着我每次瀏覽頁面時都會收到HTTP get請求(如果爲此設置某種緩存,那麼這個問題就不那麼嚴重了,但是我主要的煩惱是播客進度/狀態問題)。

任何提示或建議嗎?

謝謝!

回答

1

一般來說,我會使用共享服務來避免發生這種情況。通過使用服務和包括它的應用程序組件的供應商陣列中我們可以存儲在那裏的一些信息,這將是在整個應用程序可用的(這將是一個單身)

但是讓我們做到這一步一步:

但是例如,當瀏覽到我的播客頁面,播放曲目, 當我導航離開,軌道繼續(通過 這是好的我)玩。

在這種情況下,您可以使用didLeave()方法,因此您可以停止該軌道。你可以找到關於該方法的進一步信息here。我不僅會停止曲目,還會將我們的共享服務(例如)存儲在您正在收聽的曲目的當前時間點,並且可能還會存儲您正在收聽的歌曲的ID。

然而,當我再次導航到播客頁面,它喜歡它的整體 新實例:軌道顯示在開始不玩,進度條 ,我然後能按下播放鍵再次和兩個同時跟蹤播放的實例 。基本上,整個控制器啓動一個新的實例,啓動 。

所以,如果你回到那個頁面再次,你可以使用willEnter()方法來檢查,如果歌曲的ID是一樣的,你之前在聽,如果它是一樣的,你可以使用存儲的信息設置播客狀態(可以用您存儲的值設置進度條,顯示暫停按鈕而不是播放按鈕,等等)。

因此,這也意味着我的HTTP GET請求 正在盡一切我瀏覽到的頁面(這是更少的 問題,我想,如果我設置了某種形式的緩存爲的時間,但我 主要煩惱是播客進度/狀態問題)。

您還可以減少使用歌曲ID所做的http請求數量。如果您現在要收聽的播客與您之前收聽的播客相同,也許可以避免執行http請求。

如果其中一些項目在您的應用程序的上下文中沒有意義,他們只是一些想法,可以幫助您解決這些問題。

相關問題