router.navigate и router.navigateByUrl не работает
Я сохраняю запрошенный URL-адрес в локальном хранилище, перенаправляю на сервер идентификации, этот перенаправляет обратно на мой корневой URL-адрес, а затем я хочу перейти к ранее сохраненному URL-адресу.
Я сохраняю URL в охране:
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> {
const hasAccessToken$ = Observable.of(this.oAuthService.hasValidAccessToken());
const setRedirect$ = hasAccessToken$
.filter(isAllowed => !isAllowed)
.do(() => localStorage.setItem('login.redirect', state.url)) // save requested url for later redirect
.do(() => this.oAuthService.initImplicitFlow());
setRedirect$.subscribe();
return hasAccessToken$;
}
И я пытаюсь перенаправить в мой app.component.ts:
ngOnInit() {
this.oAuthService.tryLogin({ onTokenReceived: () => this.redirect() }); // try to parse token from url
}
private redirect() {
const url = localStorage.getItem('login.redirect');
console.log(url);
this.router.navigateByUrl(url);
}
Мой маршрут выглядит так:
const routes: Routes = [
{
path: 'files',
loadChildren: './folder-page/folder-page.module#FolderPageModule',
canActivate: [AuthGuard]
},
{
path: 'recent',
loadChildren: './recent-page/recent-page.module#RecentPageModule',
canActivate: [AuthGuard]
}
];
Если я попытаюсь получить доступ /recent
, он будет правильно храниться в локальном хранилище, вывод console.log правильно печатает '/recent'
но никакой навигации не происходит. Страница остается в корневом URL ('/'
).
Я уже пытался жестко кодировать URL-адреса ('/recent'
а также 'recent'
) и используя другую функцию router.navigate(url)
(тоже старался закодировать).
РЕДАКТИРОВАТЬ Обертывание навигации с помощью setTimeout (1000) работает... но это не может быть правильным решением