2016-09-03 4 views
0

У меня есть обслуживание в как это:Observable и зависимость инъекций в angular2

@Injectable() 
export class AuthService { 

    private contentHeader: Headers = new Headers({"Content-Type": "application/json", "Accept": "application/json"}); 

    constructor(public events: Events, private authHttp: AuthHttp){ 

    } 

    public get(url): Observable<any> {    
     return this.authHttp.get(url, { headers: this.contentHeader }) 
      .map(this.extractData) 
      .catch(this.handleError); 
    } 


    public extractData(res: Response) { 
     try { 
      let body = res.json(); 
      return body || {}; 
     } 
     catch (e) { 
      return {}; 
     } 
    } 

    public handleError(error: any) { 
     if (error.status == 401 || error.status == 403) 
     { 
      // injected 
      this.events.publish('user:logout'); 
     } 

     return Observable.throw(error); 
    } 

} 

this.events не работает внутри HandleError и вызвать эту ошибку в консоли: ИСКЛЮЧЕНИЕ: TypeError: this.events не определено

Как я могу использовать свои услуги с инъекцией зависимостей внутри раздела карты и catch Observable?

ответ

3

Вы должны использовать функцию стрелки, чтобы сохранить Context

.catch((err) => this.handleError(err)); 

или

public handleError = (error: any) => { 
    ... 
} 

или использовать bind методу

.catch(this.handleError.bind(this)); 

более подробные сведения о лексического этом здесь: