2017-09-28 45 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