我将请求的 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 ( '/'
) 中。
我已经尝试过硬编码网址('/recent'
和'recent'
)并使用其他功能router.navigate(url)
(也尝试过硬编码)。
编辑 用 setTimeout (1000) 包裹导航是可行的……但这不是正确的解决方案