2016-07-19 222 views

risposta

0

Sono stato bloccato su quello stesso identico problema. Nel mio caso, la mia logica canDeactivate annulla/reindirizza la rotta successiva in modo condizionale. A questo punto, si spera che ci sia un modo migliore, sto usando la seguente soluzione

  1. Dal mio componente, gancio nel Router eventi (in particolare RoutesRecognized) per registrare il percorso per un uso successivo.
  2. Implementare canDeactivate e utilizzare i dati del percorso salvato per restituire true o false.

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 } 
 
}

(Nota: possibile non eseguire il frammento, ma per qualche motivo la formattazione di codice di esempio non è stato il rendering correttamente.)

davvero, davvero non mi piace questo ma non ho trovato nessun altro modo.