2016-04-15 10 views
2

と呼ばれる角度2のサービスを使用して、JWTトークンをチェックし、それが自分のゲストであるかログインしているメンバーであるかを知るために使用します。角2サービスの初期化ロジック

サービスが開始されるたびにトークンを私のLocalStorageから得ることができますが、何らかの理由でそれが3回(サービスを使用するコンポーネントごとに)探していて、1回のみ取得しなければならないと確信していますすべてのコンポーネントに対してブラウザを意味

Console

がロード:はい、それは動作しますJwtService.ts:

export class JwtService { 

    private jwtToken = localStorage.getItem("jwt"); 
    public myData = this.getUserData(); 

    constructor(public router: Router,private http: Http) { 
    } 

    getToken() { 
     return this.jwtToken; 
    } 

    setToken(theToken) 
    { 
     localStorage.setItem('jwt', theToken); 
     this.jwtToken = localStorage.getItem("jwt"); 
    } 

    logOut() 
    { 
      this.jwtToken = null; 
      localStorage.removeItem("jwt"); 
      this.router.navigate(['Home']); 
    } 

    getUserData() 
    { 
    console.log("Getting user.."); 
    this.http.get('http://localhost/PokemonAPI/public/api/v1/thisUser?token='+this.getToken()) 
     .map((res:Response) => res.json()) 
     .subscribe(
     data => {this.myData = data.user; 
     console.log() 
     }, 
     err => { 
      this.JwtService.checkToken(err); 
      console.error(err); }, 
     () => console.log("User logged!"); 
    ); 
    } 

    getUser() 
    { 
     return this.myData; 
    } 
} 

が、私は私のブラウザコンソールをチェックすると、私はこれを見る私の次のコードで

ルック3回サービスし、HTTP GETを1回で3回使用しました。 なぜこれが起こりうるのですか?

答えて

4

私はあなたが異なる3つのコンポーネントに

providers: [JwtService] 

を追加したためであると仮定します。

は、新しいインスタンスがDIによって維持され、それを追加する各成分についてbootstrap(AppComponent, [JwtService]);

における代替的ルート成分(AppComponent)または上に追加します。

+1

角2のマスターに感謝します! – TheUnreal

関連する問題