2

Ich habe zwei Routen in meiner Anwendung
1) Nachladen Komponente/home - HomeComponent - Home.html
Angular 2: Wie kann ich meine Daten und HTML-Ansicht verhindern, indem sie nicht auf Browser zurück Navigation



    export class HomeComponent implements OnInit, CanReuse,OnReuse, OnActivate, OnDeactivate{ 
    ... 
     constructor(private showHomeLogo:boolean;private showLogoutButton : boolean){ 
     console.log("Home page Constrcutor called"); 
     } 
     ngOnit(){ 
     //after some service call for user authentication 
     console.log("Home page ngOnInit called"); 
     this.showLogoutButton = true; 
     this.showHomeLogo = true; 
     } 
    routerCanReuse(nextInstruction: ComponentInstruction, 
     prevInstruction: ComponentInstruction): boolean { 
     console.log('routerCanReuse'); 
     return true; 
     } 
     routerOnReuse(nextInstruction: ComponentInstruction, 
     prevInstruction: ComponentInstruction): void { 
     console.log('route on reuse'); 
     } 
     routerOnActivate(nextInstruction: ComponentInstruction, prevInstruction: ComponentInstruction): any { 
     console.log("route activated"); 
     } 
     routerOnDeActivate(nextInstruction: ComponentInstruction, prevInstruction: ComponentInstruction): any { 
     console.log("route Deactivated"); 
     } 
    } 

2)/Benutzer - UserComponent - Users.html



    export class UserComponent{ 
    ... 
     constructor(){ 
     console.log("Userpage Constrcutor called"); 
     } 
     navToBack(){ 
     //navigation to back page 
     window.history.back(); 
     //also tried the following 
     //window.history.go("-1"); 
     //location.back(); //when I import Location from Angular/common 
     //router.navigate(['home']) 
     } 
    } 

Wenn ich klicken zurück, ich bin zurück zur Startseite kommen können.
Aber die Komponente lädt ihren Konstruktor neu und ngOnit, womit ich die vorherigen Auswahlen verliere, um einige Schaltflächen in HTML anzuzeigen oder auszublenden.

Ich verwende den Angular 2 RC1 Router.

Ich muss zurück zur Homepage mit dem gleichen Zustand des HTML, wo es war. d.h. die Komponente nicht erneut zu laden.

Das bedeutet, dass alle meine Auswahlen und Einträge von Eingaben auf der Homepage bleiben sollten.

Ich vermute, das liegt daran, dass meine HomeComponent bei jeder Navigation zu dieser Route neu geladen wird, was meine HTML-Seite zum Anfangszustand führt.

Bitte helfen.

+3

Sie können einen Dienst verwenden, um Zustände zwischen Komponenten zu verwalten. Versuchen Sie das zu tun? – wolfhoundjesse

+0

Ich meine, hier sind die Formulardaten, d. H. Die auf der Homepage eingegebenen Daten, verloren, wenn auf diese Seite zurückgesprungen wird. Ja, ich kann den Dienst verwenden, um diese Formulareinträge zu speichern und wiederherzustellen, wenn ich wieder auf diese Seite zurückkomme. Aber gibt es keinen anderen Weg als Dienstleistungen? – Irus

+0

Es gibt keinen anderen Weg, wenn Sie von einer Komponente weg navigieren. Wenn Sie von einer Route zu einer anderen navigieren, während beide die gleiche Komponente anzeigen und nur die Parameter der Route ändern, ändern Sie '/ somepath /: someparam'. Dann können Sie' CanReuse' verwenden, um den Router anzuweisen, die Komponente nicht zu zerstören und neu zu erstellen. Dies sollte standardmäßig im RC.3 Router sein (scheint aber noch nicht richtig zu funktionieren) –

Antwort

0

Sie müssen Ihre Service-Funktion von Ihrem ngOnInit() entfernen und sie in eine Funktion außerhalb davon platzieren, weil dies Ihre Dienste jedes Mal aufrufen wird, was das Laden verursacht.

Dann überprüfen Sie, ob der Inhalt neu geladen werden muss oder nicht, indem Sie überprüfen, ob Ihre Werte leer sind oder nicht.

einfach lassen Sie ngOnInit() immer Ihre Dienste aufrufen.

Verwandte Themen