2016-08-11 3 views
1

Also hatte ich zuerst eine Version meiner App, die Tabs verwendet. Unter Verwendung von tabs, wenn ich zu einer Seite navigieren würde, würde die Ansicht das erste Mal initiieren (ziehen Sie Daten von api und zeigen Sie es an) und wenn ich weg von ihm navigieren und zurückkommen würde, musste nichts neu laden, es war im Wesentlichen verlassen so wie es war, weil der Controller nicht mehr lief.Angular2/Ionic2 - Controller-Reload bei Navigation verhindern

Ich habe seit der Ionic2 side menu starter implementiert und es scheint gut eingerichtet zu sein. Aber wenn ich zum Beispiel zu meiner Podcast-Seite navigiere und einen Track spiele, wenn ich weg navigiere, läuft der Track weiter (das ist für mich in Ordnung). Allerdings, wenn ich wieder auf die Podcast-Seite navigiere, ist es wie eine ganz neue Instanz davon: Der Track zeigt an, dass nicht abgespielt wird, der Fortschrittsbalken beim Start und ich kann dann erneut auf Play drücken und zwei Instanzen dieses Tracks spielen gleichzeitig. Grundsätzlich startet der gesamte Controller eine neue Instanz. Das bedeutet also auch, dass meine HTTP-Get-Anfragen jedes Mal gemacht werden, wenn ich zu der Seite navigiere (was weniger ein Problem ist, wenn ich eine Art Caching einstelle, aber mein primärer Ärger ist der Podcast-Fortschritt/Status-Problem).

Irgendwelche Tipps oder Ratschläge hier?

Danke!

Antwort

1

Im Allgemeinen würde ich einen gemeinsamen Dienst verwenden, um dies zu vermeiden. Durch die Verwendung eines Service und einschließlich es im Provider-Array der App-Komponente können wir dort einige Informationen speichern und es wird in der gesamten Anwendung (es wird ein Singleton sein)

Aber lassen Sie uns Schritt für Schritt tun :

Aber zum Beispiel, wenn zu meinem Podcast-Seite navigieren und einen Musiktitel abzuspielen, wenn ich weg navigieren, geht die Spur zu spielen (dies wird durch mich in Ordnung ist).

In diesem Fall können Sie die didLeave() Methode verwenden, so können Sie den Track stoppen. Weitere Informationen zu dieser Methode finden Sie unter here. Ich würde nicht nur den Track anhalten, sondern auch in unserem Shared Service (zum Beispiel) den aktuellen Zeitpunkt des Tracks, den Sie gerade gehört haben, und wahrscheinlich auch die ID des Songs, den Sie gerade gehört haben, speichern.

Allerdings, wenn ich navigieren wieder auf die Podcast-Seite, es ist wie eine ganze neue Instanz davon: die Spur zeigt, wie ich nicht spielen, um den Fortschritt beim Start, und ich bin dann in der Lage spielen drücken wieder und zwei Instanzen von , dass Track gleichzeitig abspielen. Grundsätzlich feuert der gesamte Controller eine neue Instanz.

Also, wenn Sie wieder auf diese Seite zurück, können Sie die willEnter() Methode überprüfen verwenden, wenn die ID des Songs ist das gleiche Sie vor zuhörten und wenn es das gleiche ist, können Sie die gespeicherten Informationen verwenden, um Stellen Sie den Podcast-Status ein (setzen Sie ggf. den Fortschrittsbalken mit dem von Ihnen gespeicherten Wert, zeigen Sie eine Pause-Schaltfläche anstelle der Wiedergabetaste an usw.).

Dies bedeutet also auch, dass meine HTTP-Anfragen erhalten werden jedes Mal gemacht werden ich auf die Seite navigieren (die weniger ein Problem ist, ich nehme an, wenn ich irgendeine Art von Caching für das einrichten, aber meine primäre Belästigung ist der Podcast-Fortschritt/Status-Problem).

Sie können auch die Anzahl der HTTP-Anfragen reduzieren, indem Sie die ID des Songs verwenden. Wenn der Podcast, den Sie jetzt hören möchten, derselbe ist wie der vorherige, den Sie gerade abhielten, können Sie möglicherweise die http-Anfrage vermeiden.

Entschuldigung, wenn einige dieser Elemente im Zusammenhang mit Ihren Anwendungen keinen Sinn ergeben, sind nur einige Ideen, die Ihnen bei der Behebung dieser Probleme helfen können.

Verwandte Themen