2016-11-04 85 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

我想我在某个地方犯了一个大错误,而不仅仅是一个背景问题。谢谢! –