2015-11-26 9 views
13

Ich habe eine Anwendung, mit Ansichten hinter Routen, ich muss in der Lage sein, von dem Punkt an fortzusetzen, als die Route geändert wurde, aber nach der Rückkehr ist die Komponente in ihrem Ausgangszustand .Angular2 Routing - Zustand der Komponente bei Änderung der Route beibehalten

Gibt es eine Möglichkeit, den Status einer Komponente beizubehalten?

+0

Im Gegensatz zu Providern, die in einzelne Komponenten injiziert werden, könnte der Schlüssel eine App-Level-Provider/Dienste sein, die hier ein wenig erklärt wird: http://StackOverflow.com/A/32807310. Wie in der Antwort erläutert, werden Component-Level-Provider jedes Mal erstellt, wenn eine Routenkomponente generiert wird. Anbieter auf App-Ebene (innerhalb von "Bootstrap" deklariert) werden einmal erstellt (siehe diese Website für weitere Informationen: http://www.syntaxsuccess.com/viewarticle/routing-in-angular-2). Wenn Sie eine gute Lösung finden, schreiben Sie es bitte hier. –

Antwort

15

Update 2

Das nun behoben ist (Angular 2.3) für den neuen Router von https://github.com/angular/angular/pull/13124, die eine individuelle Wiederverwendung Strategie bieten können.

Für ein Beispiel siehe auch https://www.softwarearchitekt.at/post/2016/12/02/sticky-routes-in-angular-2-3-with-routereusestrategy.aspx

Angular docs https://angular.io/api/router/RouteReuseStrategy

Update 2 Diese Antwort ist nur für eine lange Zeit vor Router Version eingestellt.

Sehen Sie für, wie man es im gegenwärtigen Fräser tut.

original

Wenn Ihre Komponenten implementiert CanReuse und gibt true von

routerCanReuse(next: ComponentInstruction, prev: ComponentInstruction) { 
    return true; 
} 

dann die Komponente gehalten wird und wiederverwendet statt zerstört und neu erstellt.

Eine andere Möglichkeit besteht darin, die Daten in einem gemeinsam genutzten Dienst zu behalten und sie von dort abzurufen, wenn die Komponente neu erstellt wird.

+1

Der 'CanReuse'-Link ist unterbrochen. – Hubro

+0

Der Router, auf den sich diese Antwort bezieht, ist schon lange weg. Siehe https://angular.io/docs/ts/latest/guide/router.html#!#guards für die Vorgehensweise im aktuellen Router. –

3

Es ist eine offene Frage exakt zu diesem Szenario in https://github.com/angular/angular/issues/5275

Sie routerCanReuse nur dann, wenn die neue Komponente und die alte Komponente verwenden können (wenn Sie die Schaltfläche ‚Zurück‘ getroffen) ist von dem gleichen Komponententyp.

Da Günter Ihre einzige Option im Moment vorgeschlagen hat, wenn die Komponenten von unterschiedlichem Typ sind, ist der Zustand in einem gemeinsamen Dienst zu halten.

+0

Nachdem ich viel gesucht hatte, funktionierte das für mich perfekt: https://www.softwarearchitekt.at/post/2016/12/02/sticky-routes-in-angular-2-3-with-routeresteustrategy.aspx –

+0

@ PhilipEnc Wie hast du diese Arbeit gemacht? Keine meiner Routen funktioniert, wenn ich bei der Navigation navigiere. Ich verwende Lazy Loading. – Chrillewoodz

+0

Meine App lädt nicht. Vielleicht ist das der Unterschied. –