router.navigate无法在Angular中运行或进入无限循环

时间:2019-04-17 10:54:09

标签: javascript angular angular-router

我正在使用Angular6。我有一个名为UserService的服务,该服务正在调用一个名为getUser()的函数。

在该功能中,当用户拥有无效令牌时,我想导航到登录页面。

getUser(){
 this.user = JSON.parse(sessionStorage.getItem('currentUser'));
 if (!this.user) {
   this.router.navigate(['login']);
   this.toastr.error('Unknown Logged In User');
   return false;
 }
 this.token = this.user.token;
 return this.user;
}

我要在许多组件中调用getUser。例如在ActiveOrdersComponent

getCurrentUser() {
    let loggedUser = this.userService.getUser();
    if (loggedUser) {
        this.info = {
            currentUser: {
                currentUserName: loggedUser.first_name + ' ' + loggedUser.last_name
            }
        }
    }
    return this.info.currentUser;
}

我正在使用LazyLoader。

我的原始路径是'/auth/orders/active'

目标登录路径为'/login'

函数getUser()无法导航并进入无限循环。并且浏览器因多个控制台错误而冻结。

该函数返回false,并继续执行组件中的代码(由于我返回false,所以代码将中断。)

1 个答案:

答案 0 :(得分:0)

我在几个小时前后都遇到了这个问题,我可以找到问题。遇到此问题时,会发生两件事:

  1. 当您要将用户重定向到另一个页面并使用Navigation方法时,您应该输入如下地址:

            this.router.navigate(['/login']
    
  2. 有时您会在自己的组件中编写此代码。例如,您在登录组件中编写了上面的代码。这会导致刷新页面时面临无限循环。只是您应该在Navigation方法中更改地址以解决此问题。

我希望它对您有帮助

相关问题