2017-09-28 81 views
1

我有以下的模塊結構,我的角2項目:進口供應商2

app 
    |-module1 
    |-module2 
     |-component2-1 
     |-component2-2 
     |-factories 

的工廠模塊定義了幾個供應商如下:

@NgModule({ 
    providers: [        
     { provide: Class1,   
      useFactory: Class1Factory, 
      deps: [SameModuleDependency],   
      multi: true      
     }, 
     { provide: Class2, 
      useFactory: Class2Factory 
     } 
    ] 
}) 

export function Class1Factory(): Class1 { ... } 

export function Class2Factory(): Class2 { ... } 

假設我想讓這些工廠提供程序可用於模塊2中的組件2-1和2-2。​​我應該如何將它們導入到模塊2的模塊定義中?我還沒有找到任何這樣的例子。

我想,如果我出口每個供應商單獨做這樣的事情:

Class1Provider: Provider = {provide: Class1, useFactory: ... } 
Class2Provider: Provider = {provide: Class2, useFactory: ....} 

然後在模塊2定義我可以宣佈他們:

import { Class1Provider, Class2Provider } .... 

@NgModule({ 

    providers: [Class1Provider, Class2Provider] 

}) 

不過,我還沒有找到一個方法,使這項工作(出口的情況下,不類定義)

此外,我預計一些供應商,而不是所有的人都使用過所有的同級組件,所以我WOU ld寧願不要單獨導出/導入。

獎金的問題:如果我想使它可以在模塊1的成分是什麼?

+0

是任何一個模塊的參與懶路由? –

+0

@ AngularInDepth.com目前,不是。我不希望很快就會如此。 – pablochacin

+0

_The工廠模塊定義爲follows_幾個** **模塊 - 你什麼意思'這裏modules'? –

回答

1

如果只定義模塊中提供這樣的:

@NgModule({ 
    providers: [        
     { provide: Class1,   
      useFactory: Class1Factory, 
      deps: [SameModuleDependency],   
      multi: true      
     }, 
     { provide: Class2, 
      useFactory: Class2Factory 
     } 
    ] 
}) 
export class FactoriesModule {} 

這足以導入FactoriesModule成根模塊:

@NgModule({ 
    imports: [ 
    BrowserModule, 
    FactoryModule <--------------------- 
    ], 
    ... 
}) 
export class AppModule { } 

等組件將能夠注入運用相關的供應商代幣:

class MyComponent { 
    constructor(service: Class1) {} 

這是因爲來自在編譯過程中會將ll模塊合併。

See this demo

我強烈建議閱讀:Avoiding common confusions with modules in Angular文章,解釋的細節

+0

@ angularindepth-com我試過這個解決方案,它不起作用。如果我在工廠模塊中導出Class1Factory並將提供者定義移動到module2。有用。因此,看起來供應商並未被合併。 – pablochacin

+0

他們肯定會合並閱讀文章。創建stackblitz演示,我會看看 –

+0

@ angularindepth-COM我這個玩具應用程序複製的問題。 https:// stackblitz。com/edit/angular-yv5mpq 在我的本地設置中出現此錯誤: zone.js:690未處理的Promise拒絕:沒有Class1的提供程序! ;區域:;任務:Promise.then;值:錯誤:Class1沒有提供者! – pablochacin