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) работает... но это не может быть правильным решением

0 ответов

Другие вопросы по тегам