如何在http catch函数中添加Toastr?

时间:2017-05-01 20:05:27

标签: angular toastr

我无法弄清楚如何在handlerError函数中使用toastr。当我运行它时,我收到的错误是

  

'错误'未定义的

这是我的代码

private handlerError(error: any) {  

  var  errorMessage = 'Server error';

  this.toastrService.error(errorMessage); <-- This doesn't work

  return Observable.throw(errorMessage);
}

它被称为

post(url, data): Observable<any> {     
    this.toastrService.error('hey'); // <-- This works
return this.http.post(CONSTANT.API_URL + url, data, {
  headers: this.createAuthorizationHeader()
}).
    map((res:Response) => { return this.toCamel(res.json()) }).
    catch(this.handlerError);
}

正在注射Toastr

constructor(private http: Http, private toastrService: ToastrService) {}

1 个答案:

答案 0 :(得分:1)

更改

  catch(this.handlerError);

  catch(error => this.handlerError(error))

当您调用this.handlerError时,您在handlerError方法中的此对象是Window

当你做错误=&gt; this.handlerError(错误) - 这个错误引用你的类实例。

这是一种标准的JavaScript行为。

class A {
  classAContext() {
   return ()=>this.fn();
 }

 windowContext() {
   return this.fn;
  }

 fn() {
   console.log(this);
 }
}

让我们创建一个对象:

let a = new A();

此行将打印Window

 a.windowContext()();

此行将打印A {}

 a.classAContext()();