2017-04-21 25 views
0

私は家のコンポーネントとナビゲーションパネルコンポーネントを角度2に持っています。ユーザーがナビゲーションパネル(サイドバー)のログアウトをクリックすると、ルータをコンソールにログすることによって、現在のURLが「/ login」として正しくレポートされます。ユーザが再度ログインすると、ナビゲーションパネルのルータインスタンスは、ユーザがログインした後に現在のルートを「/ login」としてレポートします。ルータは、それらをホームページに持って行く必要があります。その結果、ユーザーは決してログイン画面を通過することはなく、ブラウザーのビューとURLは更新されません。ルータに現在のルートをAngular 2で更新させるにはどうすればよいですか?

は、これまでのところ、私は次のことを試してみました:

  1. 手動ngZoneへの呼び出しでrouter.navigate呼び出しをラップ
  2. (これは問題を解決すると思われる)、ブラウザのキャッシュをクリアし、ページを更新します。 run()
  3. ホームコンポーネントのコンストラクタで角2のテンプレートキャッシュをクリアします。ここ

コードのいくつかの関連部分である:

:(login.component.tsで)ユーザがログインした後にナビゲーションを処理する方法

private doAfterLoggedIn() { 
    let returnRoute = this.route.snapshot.queryParams["ReturnUrl"] || "/"; 
    this.toaster.toast({ 
     title: `Welcome back!`, 
     duration: 2000 
    }); 
    this.router.navigate([returnRoute]); 
} 

ホームコンポーネントのルート

{ 
    path: '', 
    pathMatch: 'full', 
    component: HomeComponent, 
    resolve: { author: RouteAuthorResolver }, 
    data: { 
     panelsectionName: "home" 
    } 
}, 

NAVパネルコンポーネントにおけるログアウト方法の部分:

doLogout() { 
    // leave immediately 
    this.router.navigate(["/login"]); 
} 
+1

まずは、何をしようとしているのですか。 Pluralsightの私の「Angular Routing」コースでも同じことをしています。 'returnRoute'の値は何ですか?また、リダイレクトを使うときは 'pathMatch'だけ必要です。コンポーネントにナビゲートするときは必要ありません。 – DeborahK

+0

こんにちはデボラ、ご協力いただきありがとうございます。運行のないルートからpathMatchを削除しました。 returnRouteは次のようになります: "/ Projects"コード内で、このように: "https:// localhost:44358/login?ReturnUrl =%2FProjects" –

+0

@DeborahK週末にもあなたのコースを見てきましたが、その問題はルートの発注だったかもしれないと思っていましたが、複数のモジュールではなくすべて1つのモジュールになっています。 –

答えて

1

ブートストラップコンポーネントがHomeComponentであると仮定すると、そのコンポーネントのコンストラクタでは、loginコンポーネントにログインelseリダイレクトをチェックします。

constructor(activatedRoute: ActivatedRoute,router:Router){ 
    if(this.activatedRoute.url !== 'login'){ 
     if(!userService.geToken()){ 
       this.router.navigate(["/login"]); 
     } 
    } 
} 
+0

あなたの提案をありがとうが、私はこれでも運がなかった。ナビゲーションはまだ発生しません。 –

関連する問題