2

我想弄清楚为什么下面的router.navigate([''])代码不会使用户登录组件。我只停留在家庭组件上。当我添加调试器;代码看起来好像进入了某种无尽的循环。角度router.navigate瓦特/路由守卫不工作时已组件

以下是流程: 用户访问站点并立即将其重定向到/ login,因为Route Guard失败。如果他们登录,则Route Guard通过,然后他们转到HomeComponent的['']。然后,当他们点击注销时,我认为导航到['']应该失败,只需进入/登录。出于某种原因,它停留在HomeComponent上,并且从不导航。

home.component.ts

logout() { 
    this.userService.logout(); 
    this.router.navigate(['']); 
    } 

user.service.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; 
    } 

APP-routing.module.ts

const routes: Routes = [ 
    { path: '' , component: HomeComponent, canActivate: [UserService]}, 
    { path: 'login', component: LoginComponent }, 
    { path: 'register', component: RegisterComponent }, 
    { path: '**' , redirectTo: '' } 
]; 

回答

1

为什么小号应该导航它已经在[''],你再问一次去['']?你可以在注销时调用'this.router.navigate(['/ login'])'。

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

} 
+0

是的,使用/登录似乎是解决方案..我想你不能尝试导航到你已经在的路线。它不通过相同的过程吗? –