【问题标题】:Retrieving URL From Just Prior to Logout in Angular 2 App在 Angular 2 应用程序中注销之前检索 URL
【发布时间】: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


【解决方案1】:

Angular documentation 中,它声明RouterState 包含RouterStateSnapshot,所以在我看来,当您将其登录到控制台时会调用toString(),但您仍然在activeUrl 中保留一个引用,这可能会改变.

试试:

let activeUrl = this.router.routerState.snapshot['url'].toString();

【讨论】:

  • 不行。结果完全一样。而且我相信这里已经是一个字符串了。
猜你喜欢
  • 1970-01-01
  • 2017-11-05
  • 2022-10-14
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-01
  • 1970-01-01
相关资源
最近更新 更多