2016-01-10 94 views

回答

4

我已經在bootstrap部分完成了它。

bootstrap(AppComponent,[ 
    provide(RequestOptions, { useClass: DefaultRequestOptions }), 
    provide(Http, { useFactory: 
     function(backend, defaultOptions) { 
      return new Http(backend, defaultOptions); }, 
     deps: [XHRBackend, RequestOptions]}), 
]); 

我猜它可以在太組件來完成:

https://angular.io/docs/ts/latest/api/http/Http-class.html

你讓它動態加入的決定進廠的功能,而不是僅僅返回相同的對象。

+0

這很適合我的用例,但我不認爲它是可行的從組件內。 – Kugel

+0

你試過了嗎? – Langley

+0

現在2.0.0發佈後,這似乎不起作用。我一直在反對它試圖讓這個工作。 – amay0048

0

下面是您需要遵循的3個更廣泛的步驟來實現動態提供者。請注意我已經評論了許多代碼部分,以便我們關注主要答案。如果你想查看詳細的步驟請參考本Angular tutorial

第1步: - 創建提供商

的集合創建集合,你可以使用push方法添加DI動態對象。

var providerscoll:any = []; 
providerscoll.push({ provide: "1", useClass: DialogLogger }); 
providerscoll.push({ provide: "2", useClass: ConsoleLogger }); 

第2步: - 在 「NgModule」 提供的供應商集合。

請參閱方括號語法。

@NgModule({ 
    // code removed for clarity 
    providers: [providerscoll] 
}) 
export class MainModuleLibrary { } 

第3步: - 獲取噴油器對象的構造函數中使用DI構造

獲取注入對象,然後你可以看一下使用「get」方法和令牌。所以如果你提供「1」,那麼你得到的東西,如果你提供「2」,你會得到一些東西。

// code removed for clarity 
import { Injector } from '@angular/core'; 
// code removed for clarity 
export class CustomerComponent { 
constructor(public injector: Injector){ 
     this.logger = this.injector.get("2"); 
    } 
} 
+0

這不是動態提供者,這只是使用注射器延遲注射。 – Kugel

+0

你的意思是你想在某些事件點擊或其他地方更改組件內的進樣器。 –

+0

是的,假設你有一個用戶輸入,並且你想用這個輸入來設置一個提供程序,以便稍後實例化它的組件。 – Kugel

相關問題