2017-09-02 3 views
0

Ich benutze nav.push() und nav.pop() für die normale Navigation, aber wenn ich dem Benutzer nicht erlauben möchte, zurückzugehen (wie zum Beispiel das Setzen der HomePage nach einem erfolgreichen Login) Verwende ich nav.setRoot() mit lazy loading. Ich rufe auch setRoot('HomePage') an, um die Seite zu aktualisieren, wenn die Benutzer ihr Profil aktualisieren.Ionic setRoot lässt mehrere Instanzen gleichzeitig laufen

Allerdings ist das Problem, das ich erfahre, dass die HomePage mehrmals geladen wird. Auch wenn ich den Refresh-Button im Browser drücke, erscheinen mehr Instanzen in der Konsole!

Ich habe alle setRoot-Aufrufe über einen Ereignis-Listener in app.component.ts geleitet, um zu verfolgen, wie oft es aufgerufen wird, aber alles sieht normal aus. Ich habe versucht, appCtrl.getRootNav().setRoot(page, args) zu verwenden, aber nichts ändert sich.

Irgendwelche Idee, wo Sie suchen? Muss ich nach dem Aufruf von setRoot die Seiten manuell löschen oder den Navigationsstapel löschen?

Danke!

EDIT (Einige Code):

Abonnement für SetRoot Veranstaltung in app.component.ts:

this.events.subscribe('nav:setRoot', (data) => { 
    let page = data['page']; 
    let args = data['data']; 
    if(args !== null && args !== 'undefined'){ 
    this.appCtrl.getRootNav().setRoot(page, args); 
    }else{ 
    this.appCtrl.getRootNav().setRoot(page); 
    } 
}); 

einer beliebigen Seite, wenn ich eine neue Root-Seite festlegen möchten:

let arg = { page: 'HomePage'}; 
this.events.publish('nav:setRoot', arg); 
+2

'Wenige Zeilen Code ist mehr als tausend Worte'.Können Sie einige Zeilen Ihres Codes teilen? – Sampath

+0

Hallo Sampath, ich habe meine Frage bearbeitet, um zu zeigen, wie ich es mache. Der Navigationsprozess benötigt nicht so viel Code. Vielen Dank! – emiliosg

Antwort

0
ionViewWillUnload() { 
    this.events.unsubscribe("nav:setRoot") 
} 

das funktionierte für mich!

+0

Vielen Dank für dieses Code-Snippet, das möglicherweise eine begrenzte kurzfristige Hilfe bietet. Eine gute Erklärung [würde erheblich verbessern] (https://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) ihren langfristigen Wert, indem sie zeigt, warum dies eine gute Lösung für das Problem ist und würde es zukünftigen Lesern mit anderen, ähnlichen Fragen nützlicher machen. Bitte bearbeiten Sie Ihre Antwort, um einige Erklärungen hinzuzufügen, einschließlich der von Ihnen getroffenen Annahmen –

Verwandte Themen