我有这样的服务:
@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中不起作用并在控制台中触发此错误:EXCEPTION:TypeError:this.events未定义
如何在map和catch的Observable部分中使用我的服务和依赖注入?
答案 0 :(得分:3)
您需要使用箭头功能来保留上下文
.catch((err) => this.handleError(err));
或
public handleError = (error: any) => {
...
}
或使用bind
方法
.catch(this.handleError.bind(this));
在此处查看 lexical this 的更多详细信息: