【问题标题】:Angular 4: Inject service having @angular/http as dependency in non-component classAngular 4:在非组件类中注入具有 @angular/http 作为依赖项的服务
【发布时间】:2017-09-19 11:11:56
【问题描述】:

您好,我是 Angular 4 的新手。 我有一个名为“httpService”的服务,它具有 @angular/http 作为依赖项之一,还有其他的服务,它可以进行错误处理。

现在我有普通类(组件除外)说'Child.ts',它扩展了基类'Base.ts',构造函数在类上设置一些属性并使用上述httpService通过rest从服务器获取数据api。

我的整体结构如下所示。

Base.ts
============================================================
export class Base {
  public url: string;
  public httpSvc: HttpService;

  constructor(url) {
    this.url = url;
  }

  public getUrl(): string {
    return this.url;
  }

  public query(reqParams: URLSearchParams): Observable<any> {
    return this.httpSvc.get(this.getUrl(), reqParams);
  }
}

并且拥有扩展基类的类。

Child.ts
============================================================
export class Child extends Base {
  first_name: string;
  last_name: string;
  email: string;

  constructor(url: string) {
    super(url);
  }

  getCurrentUser(): Observable<User> {
    return this.httpSvc.get(this.url + 'get-user-profile');
  }
}

这样我就可以让每个模型都有自己的方法来从服务器获取数据。

现在在这种情况下,我如何使用尚未初始化的 httpService。

请给我建议方法或更好的解决方案。

谢谢

萨蒂什·拉卡尼

【问题讨论】:

  • 好吧,将http服务添加到构造函数参数中,并从注入httpSvc的角度组件或服务构造这些对象。

标签: angular angular2-services angular4-httpclient


【解决方案1】:

你需要像这样注入它:

constructor(private http: HttpService)

记得在顶层提供,比如你的 app.module:

providers:[
 HttpService
],

【讨论】:

  • 感谢您的回复,但是在用url实例化子类时,我不想传递httpService实例,那么在这种情况下它将如何工作?
  • @SatishLakhani 它不会。如果没有对另一个对象的引用,一个对象就不能使用另一个对象。
  • @SatishLakhani 你是说喜欢调用静态方法吗?
  • @JBNizet,那么还有其他方法可以实现我所要求的相同行为吗?
  • 我在评论中回答了你的问题。
猜你喜欢
  • 2019-03-04
  • 2018-03-14
  • 1970-01-01
  • 1970-01-01
  • 2016-09-15
  • 2016-09-10
  • 2017-12-27
  • 1970-01-01
  • 2020-03-14
相关资源
最近更新 更多