簡體   English   中英

如何將公共依賴項注入其他Angular2 @Injectable類?

[英]How can I inject common dependencies into other Angular2 @Injectable classes?

我已經在TypeScript中創建了一個組件庫,我想共享許多服務。

export abstract class ComponentBase<T> {
  constructor(protected http:Http, protected router: Router, protected route: ActivatedRoute, protected params: Params) {
  }
}

問題是我有多個嵌套類型,因此每當我必須在層次結構中派生任何級別時。 每個派生類型看起來像這樣,都是沿着基類的注入參數傳遞的。

import { Http } from '@angular/http';
import { Router, ActivatedRoute, Params } from '@angular/router';
export  class SomeDerivedType extends ComponentBase<SomeType> {
  constructor(protected http: Http, protected router: Router, protected route: ActivatedRoute, protected params: Params) {
    super(http, router, route, params);
  }
}

我必須鏈接我的構造函數,以滿足基類的構造函數參數。 這是非常煩人的開銷。 因此,我創建了一個Services類來保存所有封裝的依賴項。

import { Injectable } from '@angular/core';
import { Router, ActivatedRoute, Params } from '@angular/router';
import { Http } from "@angular/http";

@Injectable()
export class Services {
  constructor(public http:Http, public router: Router,  public route: ActivatedRoute, public params: Params) {
  }
}

我認為我應該能夠將這個服務類注入到組件中,如下所示。

import { Services } from './services'
export class SomeDerivedType extends ComponentBase<any> {
  constructor(protected services: Services) {
    super(services);
  }
}

現在,組件庫如下所示:

import { Services } from './services';
import { Http } from '@angular/http';
import { Router, ActivatedRoute, Params } from '@angular/router';

export abstract class ComponentBase<T> {
  http: Http;
  router: Router;
  route: ActivatedRoute;
  params: Params;
  constructor(protected services: Services ) {
    this.http = services.http;
    this.route = services.route;
    this.router = services.router;
    this.params = services.params;
  }
}

不幸的是,這不適用於我,而是出現以下錯誤:

(索引):63錯誤:錯誤:無法解析服務的所有參數:([對象對象],[對象對象],[對象對象] 、?)。

因此, 我的問題自然 :“是否可以將依賴服務(即http,router,route和params服務)注入到我的服務類中?”

好吧,事實證明我只是錯過了一些我不清楚的關於角度的東西。 我只使用了一段時間。 問題實際上很簡單。 參數不是服務。

(索引):63錯誤:錯誤:無法解析服務的所有參數:([對象對象],[對象對象],[對象對象] 、?)。

該消息使我失望,因為它說不能解決所有問題。 我誤解了它,因為它確實告訴我其中一個參數尚未解析。 就我而言,受保護的參數:參數。

現在,此代碼可以很好地工作,就像我希望通過刪除params項一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM