当已经在组件上时,Angular router.navigate w/routeguard 不起作用

Bla*_*ell 5 javascript typescript angular-routing angular-components angular

我试图找出为什么下面的 router.navigate(['']) 代码不将用户带到登录组件。我只停留在家庭组件上。当我添加调试器时;从代码来看,它似乎进入了某种无限循环。

流程如下: 由于 Route Guard 失败,用户来到站点并立即被重定向到 /login。如果他们登录,Route Guard 就会通过并转到 [' '],即 HomeComponent。然后,当他们单击注销时,我认为导航到 [' '] 应该会失败,只需转到 /login。由于某种原因,它停留在 HomeComponent 上并且从不导航。

home.component.ts

  logout() {
    this.userService.logout();
    this.router.navigate(['']);
  }
Run Code Online (Sandbox Code Playgroud)

用户服务.ts

  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
    let url: string = state.url;
    return this.verifyLogin(url);
  }

  verifyLogin(url: string): boolean {
    if (this.userLoggedIn) { return true; }

    this.router.navigate(['/login']);
    return false;
  }

  logout() {
    this.userLoggedIn = false;
  }
Run Code Online (Sandbox Code Playgroud)

应用程序路由.module.ts

const routes: Routes = [
    { path: '' , component: HomeComponent, canActivate: [UserService]},
    { path: 'login', component: LoginComponent },
    { path: 'register', component: RegisterComponent },
    { path: '**' , redirectTo: '' }
];
Run Code Online (Sandbox Code Playgroud)

Jul*_*ova 2

为什么它应该导航它已经在 [' '] 中,而你再次询问转到 [' ']?您可以在注销时调用“this.router.navigate(['/login'])”。

logout() {
   this.userLoggedIn = false;
   this.router.navigate(['/login']);

}
Run Code Online (Sandbox Code Playgroud)

  • 是的,使用 /login 似乎是解决方案。我想您无法尝试导航到您已经所在的路线。难道不经历同样的过程吗? (3认同)