【发布时间】:2017-11-01 22:23:34
【问题描述】:
我试图在将用户从我的 Angular 2 应用程序中注销之前获取最后一个活动 url,这样当他们重新登录时,它会将他们重定向到该组件/页面。问题是,虽然我能够使用this.router.routerState.snapshot['url'] 获得活动网址——这总是为我提供结果/login——这是他们在注销后重新定向到正确的网址。我需要做的是找到一种在注销发生之前获取 url 的方法。我尝试在我的 authenticationService 的注销功能中执行此操作:
logout()
{
let activeUrl = this.router.routerState.snapshot['url'];
console.log(activeUrl);
this.apiService.logout();
// remove user from local storage to log user out
sessionStorage.removeItem('currentUser');
console.log('User successfully logged out');
// Trigger event
this.change.emit(this);
}
但即使在调用 this.apiService.logout() 之前正在控制台记录 activeUrl(请参阅上述函数中的操作顺序),我仍然最终将 /login 记录到控制台。这是可以预料的吗?我该如何解决这个问题?
编辑:经过一番思考,我现在想到问题可能是我正在从我的登录组件的ngOnInit 生命周期挂钩中调用 logout() 函数 - 所以那时'/login'不管结果如何:
ngOnInit()
{
this.authenticationService.getActiveUrl();
this.authenticationService.logout();
}
所以相关的问题变成了:我如何捕获活动 URL就在被注销之前?
【问题讨论】:
-
当你
console.log(window.location.href)时,你得到正确的url了吗? -
那么
this.router.url值呢? -
我得到完全相同的结果——两者都是'/login'。
-
实际上,我现在想到的问题可能是我从登录组件的 ngOnInit 生命周期钩子中调用 logout() 函数 - 所以那时'/login'无论如何都会是结果。
标签: javascript angular typescript routing