2016-07-27 51 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)"> 
相關問題