2016-07-19 1 views

ответ

0

Я застрял на этом точно такую ​​же проблеме. В моем случае моя логика canDeactivate будет отменять/перенаправлять следующий маршрут условно. На данный момент, мы надеемся, есть лучший способ, я использую следующее решение

  1. Из моего компонента, зацепить в Router событий (в частности RoutesRecognized) для записи маршрута для дальнейшего использования.
  2. Внесите canDeactivate и используйте сохраненные данные маршрута, чтобы вернуть true или 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 } 
 
}

(Примечание: не запустить фрагмент кода, но по какой-то причине Пример кода форматирования не отображается правильно.)

Я действительно, действительно не нравится это, но не нашли другого пути.

 Смежные вопросы

  • Нет связанных вопросов^_^