在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,只有pathusers
。有什么办法可以做到这一点吗
第一次评论后编辑
用户路由模块确实有一个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,用取消订阅配方更新了我的答案