[英]Angular2 - inject into @Injectable
我有一個Angular2
應用程序,其中包含用於從API獲取數據的service
。 在這個例子之后,我想創建一個單獨的文件,其中應該包含一些配置數據。 我的問題是我的服務有一個@Injectable()
裝飾器,我不確定我是否可以在元數據中傳遞一個provide
數組,我將在其中注入配置,如教程中所示。 有人遇到過這樣的問題,歡迎分享他的解決方案:)
實際上,Angular2利用分層噴射器和噴射器鏈接到組件。 簡而言之,您只能在組件( providers
屬性)或應用程序級別( bootstrap
功能)上定義提供程序。
關於服務,他們將能夠使用對發起呼叫的組件可見的提供者,但是您無法在其級別定義提供者。
這是一個示例:
Application
|
AppComponent
|
ChildComponent
getData() --- Service1 --- Service2
在這種應用中,我們有三個注射器:
bootstrap
函數的第二個參數配置的應用程序注入器 providers
屬性配置的AppComponent
注入器。 它可以“看到”應用程序注入器中定義的元素。 這意味着如果在此提供程序中找不到提供程序,它將自動查找此父注入程序。 如果在后者中找不到,則會拋出“找不到提供者”錯誤。 ChildComponent
注入器將遵循與AppComponent
相同的規則。 要注入為組件執行的注入鏈中涉及的元素,將首先在此注入器中查找提供者,然后在AppComponent
者,最后在應用程序中AppComponent
。 這意味着,試圖將注入時, Service1
到ChildComponent
構造,Angular2將調查ChildComponent
注射器,然后進入AppComponent
一個最后進入應用程序之一。
由於Service2
需要被注入到Service1
,相同分辨率的處理會做到: ChildComponent
注射器, AppComponent
一個應用程序之一。
這意味着可以使用組件的providers
屬性和應用程序注入器的bootstrap
函數的第二個參數,根據您的需要在每個級別指定Service1
和Service2
。
這個答案可以幫助你:
這有點奇怪,但只有組件可以在Angular(well和bootstrap()
配置依賴注入,但這與root組件基本相同)。 即,只有組件可以指定提供者。
正如@Thierry在他的回答中提到的,如果組件具有指定的providers
數組,則組件樹中的每個組件將獲得關聯的“注入器”。 我們可以把它想象成一個注入器樹,它(通常很多)比組件樹更稀疏。 當需要解析依賴關系時,將查詢此注入器樹。 能夠滿足依賴性的第一個注入器就是這樣做的。 注入器樹朝向根組件/注入器向上走。
因此,為了使您的服務注入配置對象依賴項,首先必須使用注入器注冊該配置對象。 即,在組件的providers
數組中,調用
provide(stringToken or OpaqueToken, {useValue: MyConfigObject} )
此注冊必須發生在您要使用/注入服務的組件或其上方某處。
然后,您的服務應該能夠@Inject
注冊的配置對象,因為它將在注入器樹中找到它。
請注意,由於只有組件可以配置提供程序,因此@Injectable()
裝飾器不支持任何配置選項,因此不支持providers
數組。
這不受支持。 對於服務,需要將提供程序添加到bootstrap(AppComponent, [..., Service, ServiceDependency1, ...])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.