2016-11-04 4 views
1

Httpにいくつかの機能を追加しようとしていますが、ユーザーが403を取得してユーザー情報を削除し、ログインにリダイレクトすると、 AuthHttpの例を以下に示します。サービス内でサービスを使用

EXCEPTION: this.authService is undefined

私はサービス内でサービスを利用しようとしているので、私は、周りを取得する方法がわからない:

問題がある
@Injectable() 
export class AuthHttp { 
    constructor(
     private http: Http, 
     private router: Router, 
     private authService: AuthService 
    ) { } 

    get(url: string, options?: RequestOptionsArgs): Observable<any> { 
     return this.http.get(url, options) 
      .catch(this.errorHandler); 
    } 

    errorHandler(error: any): Observable<any> { 
     if (error.status === 403) { 
      console.error('TOKEN EXPIRED!'); 
      this.authService.logout(); 

      let link = ['/login']; 
      this.router.navigate(link); 
     } 

     return Observable.throw(error); 
    } 
} 

、私は次のエラーを取得します。

providers: [ 
    ..., 
    AuthService 
] 

ルーターが同様のエラーをスローします。

答えて

2

これはerrorHandlerメソッドのためであり、そのコンテキストはthisとなります。あなたがコールバックとして

.catch(this.errorHandler.bind(this)); 

それを指定するときは、thisに関数をバインドする必要がありますそれとも、errorHandler矢印機能、this(サービスインスタンスを参照)が

errorHandler = (error: any): Observable<any> => { 
+0

を維持される作れば私は思いました文脈の問題だけでなく、どこかで大きなミスを犯しました。ありがとう! –

関連する問題