【问题标题】:Inject service with global function注入具有全局功能的服务
【发布时间】:2018-04-05 16:26:14
【问题描述】:

在我的所有服务中,我有 2 个方法,handleErrors 和 ExtractData,这违反了 DRY 原则。

两种方法:

  private extractData(res: Response) {
    let body = res.json();  
    return body || {};
  }

  private handleErrors(error: any): Observable<any> {
    return Observable.throw(error.json(););
  }

我想公开这些方法并将它们移动到一个服务中,然后我将注入到我的所有服务中,从而从:

  getFoo(): Observable<IFoo[]> {
    return this._http.get(FooApi)
      .map(this.extractData)
      .catch(this.handleErrors);
  }

也是:

  getFoo(): Observable<IFoo[]> {
    return this._http.get(FooApi)
      .map(this._helperService.extractData)     //<--
      .catch(this._helperService.handleErrors); //<--
  }

我在.map(this._helperService.extractData) 收到的错误是:

'(res: Response) => {}' 类型的参数不可分配给 '(value: Response, index: number) => {}'类型的参数。种类 参数“res”和“value”不兼容。 “响应”类型不可分配给“响应”类型。存在具有此名称的两种不同类型,但它们不相关。 “响应”类型中缺少属性“正文”。

我尝试添加括号(),但随后收到:

预期 1 个参数,但得到 0 个。

为什么当方法在同一个类中时它会起作用?
当方法在另一个类中时,我怎样才能使它工作,或者我需要采取不同的方法?

【问题讨论】:

  • 不是因为班级。这是因为您在定义共享服务的模块中缺少导入。提示:有一个名为 Response 的全局变量

标签: angular typescript


【解决方案1】:

import { Response } from '@angular/http'; 添加到您的助手服务中。

当前帮助服务使用 lib.dom.d.ts Response 接口。

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 2015-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 2020-05-01
    相关资源
    最近更新 更多