2017-08-24 1 views

Antwort

0

Anstatt das Fensterobjekt zu verwenden, sollten Sie einen Route Guard verwenden. In Ihrer Routenkonfiguration sollten Sie einen CanDeactivate Guard hinzufügen. Follow this guide, ist es sehr ähnlich zu dem, was Sie erreichen möchten.

0

Hier ist, wie ich es in meiner App mache.

Importieren Sie die 'Location' API von angular in Ihr Modul.

import { Location, LocationStrategy, PathLocationStrategy } from '@angular/common'; 

es an den

providers: [ Location, {provide: LocationStrategy, useClass: PathLocationStrategy}, ... ] 

Hinweis

Liste des Anbieters hinzufügen - Sie können den ‚PathLocatioStrategy‘ einen Teil davon nicht brauchen, wenn Sie nicht URLs manuell neu zu schreiben.

Dann in Ihrem Root-Komponente oder ein Singleton Service, Import Lage wieder ...

import { Location } from '@angular/common'; 

es in den Konstruktor injizieren

constructor (private location: Location) { .... 

dann auf die 'Zurück' PopStateEvent abonnieren.

location.subscribe((back: PopStateEvent) => { 
    ... your code here ... 
    this.modal.showModal(); 
}); 

Wenn Sie den Winkel Router oder etwas anderes verwenden, das den Winkel Location API und mit dem Weg Umschreiben verwendet, kann es diese von der Arbeit verhindern. Ich benutze den Angular Router nicht viel, aber ich vermute, dass es wahrscheinlich eine Methode für den Umgang mit PopStateEvents gibt.

+1

Es funktioniert genau das, was ich schon hatte. Es zeigt mir, dass Modal Pop-Up, aber es geht auch zurück. Vielen Dank! – user3590346

+0

Auch funktioniert es, wenn ich auch vorwärts – user3590346

0

Angular 2/4 bietet eine Möglichkeit, genau das gleiche zu tun. Und die Lösung ist canDeactivate.

canDeactivate ist eine Routeneigenschaft, die zur Route hinzugefügt werden kann, deren Komponente die Zurück-Schaltfläche enthält.

Der canDeactivate-Wächter übernimmt einen Dienst als Eingang. Der Dienst implementiert canDeactivate Schnittstelle (@ Angular/Router).

Wenn nur dieser Service wahr zurückgibt, würde der Benutzer zurückgehen können.

Weiterführende Literatur: https://angular.io/guide/router#candeactivate-handling-unsaved-changes

+0

klicke, muss ich dies in all meinen Komponenten implementieren. Ich möchte einzelne Funktion in app.component hinzufügen, so dass überall in meiner Anwendung, wenn der Benutzer zurückklickt, Modal angezeigt werden sollte. Vielen Dank! – user3590346

+0

Ist die Zurück-Taste für alle Bildschirme Ihrer App gleich (Die Schaltfläche ist Teil der Shell) oder ändert sie sich? –

+0

Es ist das gleiche für alle Bildschirme. Grundsätzlich, in meiner Anwendung, zu einem beliebigen Zeitpunkt, wenn der Benutzer die Taste zurückdrückt, sollte ein Modal Pop. – user3590346

Verwandte Themen