angular2中的可观察和依赖注入

时间:2016-09-03 07:43:04

标签: angular typescript ionic2

我有这样的服务:

@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部分中使用我的服务和依赖注入?

1 个答案:

答案 0 :(得分:3)

您需要使用箭头功能来保留上下文

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

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

或使用bind方法

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

在此处查看 lexical this 的更多详细信息: