2017-05-12 2 views
0

ユーザーが登録済みの資格情報を使用してログインできるように作成された簡単なアプリケーションがあります。角2ユーザーがログインしているかどうかに基づいて特定のコンポーネントにルーティングする

「ユーザー」メニューをクリックすると、ユーザーが現在ログインしているかどうかに応じて特定のコンポーネントに移動するように、ユーザーにとっては少しわかりやすいようにしたいと考えています。

ログインユーザー

- ユーザーログアウトし

ログアウトできます>コンポーネント - >これまで


でログを可能にするコンポーネントを、私は次のことを持っています。

import { Component, OnInit } from "@angular/core"; 
import { AuthService } from "./auth/auth.service"; 

@Component({ 
    selector: 'app-header', 
    template: ` 
     <header class="row"> 
      <nav class="col-md-8 col-md-offset-2"> 
       <ul class="nav nav-pills nav-justified"> 
        <li routerLinkActive="active"><a [routerLink]="['/authors']">Authors</a></li> 
        <li *ngIf="isLoggedIn" routerLinkActive="active"><a [routerLink]="['/user/logout']">User</a></li> 
        <li *ngIf="!isLoggedIn" routerLinkActive="active"><a [routerLink]="['/user']">User</a></li> 
       </ul> 
      </nav> 
     </header> 
    ` 
}) 
export class HeaderComponent implements OnInit { 
    constructor(private authService: AuthService){} 
    isLoggedIn: boolean 


    ngOnInit() { 
     this.isLoggedIn = this.authService.isSignedIn(); 
    } 
} 

しかし、それだけで私のサービスによって移入された値isLoggedInは、更新されていませんように、ページをリフレッシュで動作するようです。

Angular2を使ってMEANスタックを使用してこれを最大限に達成する方法についてのご意見をお待ちしております。

+0

あなたはそれが構造化されてい道をロードした後、あなたは誰かが実際にログインしたときに 'this.isLoggedIn'を更新する必要があります。あなたはngOnChange代わりのngOnInitに移動たぶんあれば、それは動作します(ただし、希望頻繁に火)。 –

+0

私はこれが事実かもしれないと思った、そのような振る舞いを構造化する良い方法はありますか? –

+0

私は適切な方法はObservableを使ってステータスが何であるかをauthServiceで監視することだと思いますか? –

答えて

0

プレイスコンストラクタロジックを変更することによって解決さ

constructor(private router : Router, 
      private authService: AuthService){ 
    if(!this.authService.isSignedIn()){ // not of negative case 
     this.router.navigateByUrl('/signin') //path 
    } 

} 
+0

この変更に対応するためにテンプレートを変更する必要がありますか? –

+0

は必須ではありません。 – Aravind

+0

何も変更されていないようですか?どのルートオプションにナビゲートすべきかをどのように知っていますか? –

0

内部チェック。ユーザーがリンクをクリックしたときにリルートを試みるのではなく。また、今のルートはコンポーネント

ngOnInit() { 
    if(this.authService.isSignedIn()){ 
     this.router.navigateByUrl('/user/logout'); 
    }} 
関連する問題