2017-02-13 65 views
0

的指令混淆我有一個名爲CoreModule核心模塊,它包含了一個名爲MapManagerService服務,指令中指定FlyToDirective它使用MapManagerService,和一個叫ElementComponent它使用的flyTo組件。核心模塊對業務的使用

AppModule進口CoreModule,並使用其組件,加了它自己的MapManagerService

讀取角核心模塊的documentation,你會發現:

更確切地說,角積聚所有導入的提供者追加@ NgModule.providers中列出的項目之前。該順序確保我們明確添加到AppModule提供程序的任何內容優先於導入模塊的提供程序。

,但在FlyToDirective仍採用進口CoreModuleMapManagerService,我收到的文件錯了嗎?

我計算過,應該使用的服務是AppModule小號MapManagerService而不是CoreModule小號

任何幫助,將不勝感激,謝謝。

+0

請張貼代碼。 「plus有自己的MapManagerService」是什麼意思? –

回答

0

添加到非惰載模塊的providers: [...]的所有提供程序都被掛載到應用程序的根作用域中。在多個這樣的模塊中註冊了相同的提供者,只有最後導入的那個模塊生效。

雖然添加到AppModule的提供者直接優先於導入模塊的提供者。

然後,您可以向@Component({providers: [...]})添加提供程序,然後組件和它的子代將從此提供程序獲取實例,而不是應用程序根作用域的提供程序。

或者,您可以使模塊延遲加載。延遲加載的模塊會將自己的根作用域以及此模塊中的組件和服務作爲來自此提供程序的實例。

+0

感謝您的快速回復! isn的設置'提供者'棄用?我已經嘗試過了,它不起作用,而且它沒有出現在'Component' d.ts –

+0

'FlyToDirective'導入CoreModule的'MapManagerService',我期望導入的'MapManagerService'是'AppModule在'AppModule'中使用'ElementComponent'時的服務,但它仍然是'CoreModule's。我想要保持每個模塊在分離時的行爲相同,但是當導入CoreModule時,該指令應該使用AppModule的MapManagerService –

+0

如果您沒有提供演示代碼你做了什麼,我無法幫助你。我沒有動機從口頭解釋中建立一個代碼的心智模型,因爲你可以發佈它。 –