我的主应用程序路由器中有以下内容:
{ path: 'users', loadChildren: 'app/modules/users/users.module#UsersModule', canLoad: [AuthGuard] }
当用户访问http://localhost:4200/users/1234查看他们的个人资料时,我会尝试保存完整的 url(包括上面的用户 ID),以便在他们登录后返回该页面.
问题是,函数Route
中的参数canLoad
只有一个path
字段,上面不包含用户ID,只有路径users
。有没有办法可以做到这一点?
第一次评论后编辑
用户路由模块确实有一个canActivate
守卫,但是除了登录组件之外,它永远不会被调用,因为第一个canLoad
返回 false 并将调用者路由到之前的登录组件。
第一次回答后编辑
canLoad(route: Route) {
if (!AuthService.isAuthenticated()) {
this.router.events.takeWhile(event => !(event instanceof NavigationCancel))
.subscribe(event => {
console.log(event);
if (event instanceof NavigationCancel) {
AuthService.setRedirectUrl(event.url);
}
});
return false;
}
return true;
}
所以我尝试了上述方法,但我认为我仍然做错了,因为控制台从不记录......我如何NavigationCancel
在设置存储重定向 URL 后取消订阅或停止接收事件?