2016-07-27 6 views
0

にリダイレクトされます。私はAngular2 rc.4(router 3.0.0-beta.2)でPathLocationStrategyを使用します。Angular2:成功したログインとログアウトはlocalhost: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/#が登場し、どうしてそれらを取り除くことができるのですか?

マイルートの設定は、私は私のダッシュボードページに移動しthis.router.navigate(['/myapp/dashboard']);を使用して、私のログインコンポーネントで

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 
      } 
     ] 
    } 
] 

です。

そしてAuthGuardが、これは複数のブラウザ(クロム、Firefoxの、サファリ)で起こった、ところで

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

のようなものです。

答えて

0

私は自分の質問に答えるために戻ってきました。ルータの設定に関連する問題ではなく、自分のhtmlファイルの問題であることが判明しました。

私は私のhtmlファイル内

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

を持っており、対応するTSファイルに

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

を持っています。

だから、最初にlocalhost:3000/#にリダイレクトされてからlocalhost:3000/loginにリダイレクトされます。 localhost:3000/#は、実際には有効なルートではありません。角度インスタンス全体がリロードされ、デフォルトでログインページにリダイレクトされます。

<a (click)="logoutClick($event)"> 
にHTMLを変更するのいずれか、それを修正

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

にHTMLを変更しlogoutClick(イベント) `メソッドまたは単にからthis.router.navigate(['login']);を削除する

関連する問題