2016-07-27 49 views
0

我使用PathLocationStrategy与Angular2 rc.4(路由器3.0.0-beta.2)。Angular2:成功登录和注销得到重定向到本地主机:3000 /#

我遇到了touter重定向的奇怪问题。

案例1:首先要清除浏览器历史记录/缓存文件

localhost:3000/login登录成功后,路由器会重定向到localhost:3000,这是符合市场预期。

注销后,路由器首先重定向到localhost:3000/#,然后重定向到localhost:3000/login

案例2:与病例1

的历史成功登录后从localhost:3000/login,路由器重定向到localhost:3000/#

注销后,路由器首先重定向到localhost:3000/#,然后重定向到localhost:3000/login

我的问题是为什么localhost:3000/#出现在上述情况下,我该如何摆脱它们。

我的路线设置为

export const LoginRoutes = [ 
    { 
     path: '', 
     redirectTo: '/myapp/dashboard', 
     pathMatch: 'full' 
    }, 
    { path: 'login', 
     component: LoginComponent 
    } 
]; 

export const ProtectedRoutes: RouterConfig = [ 
    { 
     path: '', 
     redirectTo: '/myapp', 
     pathMatch: 'full' 
    }, 
    { 
     path: 'myapp', 
     component: RouteDispatcherComponent, 
     canActivate: [AuthGuard], 
     children: [ 
      { 
       path: '', 
       redirectTo: '/myapp/dashboard', 
       pathMatch: 'full' 
      }, 
      { 
       path: 'dashboard', 
       component: DashboardComponent 
      } 
     ] 
    } 
] 

在我登录组件,我用this.router.navigate(['/myapp/dashboard']);浏览到我的仪表板页面。

而且AuthGuard就像

canActivate() { 
    if (this.authService.isAuthenticated()) { 
     return true; 
    } 
    this.router.navigate(['/login']); 
    return false; 
} 

顺便说一句,这件事发生在一个以上的浏览器(Chrome,Firefox和Safari)。

回答

0

我回来回答我自己的问题。事实证明,这不是一个与路由器设置有关的问题,而是我的html文件中的一个问题。

<a href="#" (click)="logoutClick($event)"> 

在我的HTML文件,并在相应的TS文件有

logoutClick(event) { 
    this.auth.logout(); 
    this.router.navigate(['login']); 
} 

所以,这就是为什么它首先被重定向到localhost:3000/#,然后到localhost:3000/loginlocalhost:3000/#是acutually不是一个有效的路线。整个角度实例重新加载并默认重定向到登录页面。

为了修正它,要么改变HTML以

<a [routerLink]="['/login']" (click)="logoutClick($event)"> 

和从logoutClick(事件)移除this.router.navigate(['login']);`方法或简单地改变的HTML

<a (click)="logoutClick($event)"> 
相关问题