2016-11-04 36 views
1

我想添加一些功能給Http,當用戶得到403它刪除他的用戶信息並重定向到登錄。 AuthHttp的例子可以在下面看到。使用服務裏面的服務

@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); 
    } 
} 

的問題是,我會收到以下錯誤:

EXCEPTION: this.authService is undefined

,我不知道怎麼去解決,因爲我試圖用一個服務中的服務。我在下面的提供商內部添加了AuthService

providers: [ 
    ..., 
    AuthService 
] 

路由器會拋出類似的錯誤。

回答

2

這是因爲errorHandler方法,其中this所指的上下文。你應該綁定功能this當你將它指定爲回調

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

或者,如果你讓errorHandler箭頭功能,this(指服務實例)將保持

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

我想我在某個地方犯了一個大錯誤,而不僅僅是一個背景問題。謝謝! –