在angular 2+;中,路由到延迟加载模块内的特定页面;

在angular 2+;中,路由到延迟加载模块内的特定页面;,angular,angular-routing,angular-router-guards,Angular,Angular Routing,Angular Router Guards,我的主应用程序路由器中有以下内容: {path:'users',loadChildren:'app/modules/users/users.module#UsersModule',canLoad:[AuthGuard]} 当用户去查看他们的个人资料时,我会尝试保存完整的url(包括上面的用户ID),以便在他们登录后返回到该页面 问题是,canLoad函数中的Route参数只有一个path字段,该字段不包括上面的用户ID,只有pathusers。有什么办法可以做到这一点吗 第一次评论后编辑 用户路

我的主应用程序路由器中有以下内容:

{path:'users',loadChildren:'app/modules/users/users.module#UsersModule',canLoad:[AuthGuard]}

当用户去查看他们的个人资料时,我会尝试保存完整的url(包括上面的用户ID),以便在他们登录后返回到该页面

问题是,
canLoad
函数中的
Route
参数只有一个
path
字段,该字段不包括上面的用户ID,只有path
users
。有什么办法可以做到这一点吗

第一次评论后编辑

用户路由模块确实有一个
canActivate
guard,但除了从登录组件调用外,不会调用它,因为第一个
canLoad
返回false,并将调用者路由到登录组件

在第一次回答后编辑

canLoad(路由:路由){
如果(!AuthService.isAuthenticated()){
this.router.events.takeWhile(事件=>!(导航取消的事件实例))
.订阅(事件=>{
console.log(事件);
if(导航的事件实例取消){
AuthService.setRedirectUrl(event.url);
}
});
返回false;
}
返回true;

}
由于在构建路由器状态期间调用了
canLoad
,因此不会激活路由和整个路由器状态。它只有路线

您可以将路由器插入到一个保护中,订阅可以访问URL的事件

我如何取消订阅或停止接收NavigationCancel事件 设置存储重定向URL

因为,您可以这样取消订阅:

// get the subscription reference
const subscription = this.router.events.takeWhile(event => !(event instanceof NavigationCancel))
      .subscribe(event => {
        console.log(event);
        if (event instanceof NavigationCancel) {
          AuthService.setRedirectUrl(event.url);
          // use it to unsubscribe
          subscription.unsubscribe(); <----------------------------
        }
      });
//获取订阅引用
const subscription=this.router.events.takeWhile(事件=>!(导航的事件实例取消))
.订阅(事件=>{
console.log(事件);
if(导航的事件实例取消){
AuthService.setRedirectUrl(event.url);
//使用它来取消订阅

订阅。取消订阅();如果要将状态保存到保护中,请尝试使用
canActivate
guard。由于在构建路由器状态期间调用了canLoad,并且之后调用了
canActivate
,因此canActivate保护将获得更多信息。它将获得其激活的路由和整个路由器状态,而canLoad保护仅获取路由。S是的,但是如果
canLoad
首先失败,
canActivate
将永远不会被调用!对,但是如果失败,您还需要保存页面吗?
canLoad
失败,因为调用者没有登录。调用者然后被路由到一个登录组件,该组件在验证后,应该将用户路由到原始URL。尝试将路由器注入一个守卫,订阅守卫并收听或事件谢谢,我也编辑了我的答案,我相信仍然缺少一些东西,但我想这与我在这种情况下观察到的操作员有关!@Sammy,用取消订阅配方更新了我的答案