2017-01-27 2 views
6

Ich baue eine einzelne Seite Anwendung mit mehreren Ansichten von einem Router bedient.Wie navigiere ich zurück in angular2 apps?

Die meisten der Informationen, die ich gelesen habe, sagt, um location:Location als Dienst zu injizieren, dann (click)='location.back' verwenden, um eine Ansicht zurückzugehen.

Dies funktioniert nicht für mich, als ob Sie auf einer bestimmten Ansicht starten und klicken Sie zurück, beenden Sie die App und gehen Sie auf die vorherige Website. Ich erhalte auch häufige Seitenladevorgänge, wenn ich dies als Navigationsmethode verwende. Gibt es eine History-API oder eine andere Möglichkeit, die Navigation in einer ng2-Anwendung zu handhaben? Diese

+0

Klingt wie ein normales Verhalten. Wohin soll der Browser gehen, wenn es keine Seite gibt, zu der man zurück navigieren kann? Anstatt einen "Zurück" -Link in Ihrer Benutzeroberfläche zu verwenden, der nicht sehr explizit ist, können Sie ihn durch einen Link ersetzen, der den Benutzer zu einem Bildschirm führt, der als "Elternbildschirm" dienen kann? Wenn der Benutzer beispielsweise ein bestimmtes Element anzeigt, kann der Link sie zur Elementliste führen. Wenn sie tief in einem Menüzweig sind, könnte der Link sie zu dem übergeordneten Menüelement usw. führen. – AngularChef

+1

Ich könnte das tun, aber gibt es eine Möglichkeit festzustellen, ob der Backlink zu einem anderen Host oder Hostnamen gehen wird oder nicht ? Ich möchte nicht immer, dass die Navigation zum Dashboard zurückkehrt, manchmal springen sie von einer anderen Seite. – userqwert

+0

Ich verstehe. Mit dem [CanDeactivate] (https://angular.io/docs/ts/latest/api/router/index/CanDeactivate-interface.html) können Sie Code * ausführen, bevor ** Sie eine Route verlassen, aber ich habe Angst Es funktioniert nur, wenn Sie von einer eckigen Route zu einer anderen navigieren, nicht von einer Route zu einer externen URL. – AngularChef

Antwort

19

Sie Standort aus Winkel gemeinsamen wie verwenden:

import {Location} from '@angular/common'; 
    constructor(private _location: Location){ } 
    goback(){ 
     this._location.back(); 
    } 
+1

Ja, genau das mache ich, und was ich in der Frage geschrieben habe ... Ich suche nach einem Weg, der die Anwendung nicht versehentlich verlassen wird. Sie müssen hier auch keine goBack-Methode binden. Sie können direkt auf den Lokalisierungsdienst in der Vorlage zugreifen. – userqwert

+0

ja, in html verwenden wie: 'Back' aber make 'public _location: Location' –

1

Verwendung:

window.history.back(); 
+0

Ich weiß nicht, warum das abgelehnt wurde. Technisch funktioniert das ... auch wenn es nicht die bevorzugte Methode ist. – krummens

+0

Vielen Dank @ krummens –

+0

Dies ist genau das, was die back() Methode des Location Service in @ angular/common hinter den Kulissen im üblichen Fall macht, wenn Sie das @ angular/platform-browser Modul verwenden. Der Vorteil der Angular-Methode besteht darin, dass sie allgemeiner ist und auf anderen Plattformen funktioniert, die von Angular unterstützt werden. – Cito

0

kann hilfreich sein

history: string[] = []; 

constructor(private router: Router) { 
    router.events 
     .filter(event => event instanceof NavigationEnd) 
     .subscribe(event => { 
      this.history.push(event.url); 
     }); 
} 

onBack() { 
    if (this.history.length > 1) { 
     // pop current page 
     this.history.pop(); 
     // pop previous page (later it will be added) 
     this.history.pop(); 
     window.history.back(); 
    } 
} 

onHome() { 
    window.location.replace(window.location.origin); 
} 
Verwandte Themen