2016-07-19 26 views

Antwort

0

Ich habe auf dem exakt gleiche Problem stecken geblieben. In meinem Fall wird meine canDeactivate-Logik die nächste Route bedingt abbrechen/umleiten. An dieser Stelle hoffentlich gibt es eine bessere Art und Weise, ich die folgende Lösung

  1. Aus meiner Komponente, Haken in die Router Ereignisse (insbesondere RoutesRecognized) die Route für eine spätere Verwendung aufzuzeichnen.
  2. Implementieren Sie die canDeactivate und verwenden Sie die gespeicherten Routendaten, um wahr oder falsch zurückzugeben.

ngOnInit(): void { 
 
\t this.tabbedSearch = this.profilesService.currentProfile.tabbedSearch; 
 

 
\t this.router.events 
 
\t \t .filter(e => e instanceof RoutesRecognized) 
 
\t \t .map(e => <RoutesRecognized> e) 
 
\t \t .subscribe((e) => { 
 
\t \t \t this.lastRoute = e.state.root.firstChild.routeConfig.path; 
 
\t \t \t this.lastParams = e.state.root.firstChild.params; 
 
\t \t }); 
 
} 
 

 
public canDeactivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean { 
 
\t // do not navigate away if we are doing tabbed search AND the new route is the article details view 
 
\t if (this.tabbedSearch && this.lastRoute == "article/details/:type/:id/:version") { 
 
\t \t this.tabbedDetails.push(Object.create(this.lastParams)); 
 

 
\t \t return false; 
 
\t } 
 
\t else { 
 
\t \t return true; 
 
\t } 
 
}

(Hinweis: Sie nicht führen Sie den Code-Schnipsel, aber aus irgendeinem Grund die Code-Beispiel Formatierung nicht richtig gemacht wird.)

ich wirklich, wirklich nicht mögen Dies hat aber keinen anderen Weg gefunden.