2016-04-15 100 views
2

我有角2服務調用JwtService.ts用於檢查JWT令牌並在我的不同組件中使用它以便知道用戶是來賓還是登錄成員。Angular 2服務初始化邏輯

每次服務啓動時,我都會從我的LocalStorage中獲得令牌,但由於某些原因,它正在尋找它3次(每次使用該服務的組件),並且我非常確定它只能被修復一次適用於所有組件。

看我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; 
    } 
} 

是的,它的工作原理,但如果我檢查我的瀏覽器控制檯我看到這下面的代碼:

Console

這意味着瀏覽器加載服務3次,並在一次運行中使用我的HTTP GET 3次。 這是什麼原因造成的?

回答

4

我想這是因爲你在3層不同的組件加入

providers: [JwtService] 

添加它僅在根組件(AppComponent)或可替代地在bootstrap(AppComponent, [JwtService]);

對於其中添加它一個新的實例是由DI保持每個組件。

+1

謝謝大師Angular 2! – TheUnreal