2016-11-04 3 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); 
    } 
} 

, 나는 다음과 같은 오류가 발생합니다. 아래처럼 제공자 내부에 AuthService를 추가했습니다.

providers: [ 
    ..., 
    AuthService 
] 

라우터가 비슷한 오류를 발생시킵니다.

답변

2

이는 errorHandler 방법이며, 해당 문맥은 this입니다. 당신이 화살표의 기능을 errorHandler 할 경우 또는 this는 (서비스 인스턴스를 참조)

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

을 유지됩니다

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

콜백로 지정 때 this의 기능을 결합해야

+0

나는 생각 컨텍스트 문제 만이 아니라 어딘가에서 큰 실수를 저지른 것입니다. 감사! –