2016-08-21 3 views
4

Ich möchte die Änderung der Route abbrechen, wenn der Benutzer im Browser auf die Schaltfläche Zurück oder Vorwärts klickt. Bisher schaffe ich die Strecke Änderungsereignis wie im Code zu erfassen unter:So stornieren Sie die Routenänderung in Angular 2?

constructor(router:Router) { 
    router.events 
    .subscribe((event:Event) => { 
     // some logic. 
     // event.preventDefault(); ? 
    }); 
} 

Ich konnte keine Methode/Mitglied in Veranstaltung finden das Ereignis Standard zu stoppen. Dann werde ich diesen Fehler auf der Konsole erhalten, weil ich keine Route-Konfiguration wie beabsichtigt registriert habe, das ist, weil ich location.go() verwende, um die URL zu ändern.

Error: Uncaught (in promise): Error: Cannot match any routes: 'Some/Url'

Gibt es eine Möglichkeit, die Änderung der Route abzubrechen, so dass Angular nicht auf die Routenkonfiguration schaut?

+0

, wo Sie in der Lage, dies zu lösen? –

Antwort

8

Sie können canDeactivate Guard verwenden, wenn Sie eine Route definieren. Dies hilft Ihnen beim Schreiben der Logik beim Ändern der Route.

Sie können einfach true oder false zurückgeben, basierend darauf, ob Sie die Routennavigation fortsetzen oder ablehnen möchten. Außerdem erhalten Sie einen Verweis auf Ihre Komponenteninstanz, die für diese Route aktiv ist, um eine Eigenschaft darauf zu lesen.

Unterschrift des Verfahrens ist wie unten,

canDeactivate(component: T, 
    route: ActivatedRouteSnapshot, 
    state: RouterStateSnapshot) : 
    Observable<boolean>|Promise<boolean>|boolean 

Sie können mehr darüber lesen here

Verwandte Themen