在App和每个Module angular 2中导入sharedModule

时间:2017-11-14 03:39:06

标签: angular

我对如何导入共享模块在角度2中使用并寻找一些说明有点困惑。

因此,当我使用导入的组件和模块创建一个SharedModule类时,我也将其导出以便重用。我将SharedModule导入到我的app.module中,因此:1。它将在应用程序加载时出现。 2.所以我不必在其他功能模块中导入它。

我注意到即使我在我的app.module中导入但是当我运行我的应用程序时,我得到的错误信息是我缺少组件或模块的引用。所以我最终导入了所有功能模块中的共享模块。我想把它放在app.module中,我不会在其他模块中导入它吗?

2 个答案:

答案 0 :(得分:2)

  

我想把它放在app.module中,我不会在其他模块中导入它吗?

不,导入AppModule的任何模块都不可用于AppModule导入的任何其他模块。如果您希望某个功能模块可以使用SharedModule's导出的管道/组件/指令,则必须明确地将SharedModule导入该功能模块。这样做的好处是,您将所有导出的组件都放在 ONE 模块中,因此即使您必须将SharedModule导入10个功能模块,您也只需要制作1导入,而不是在这10个功能模块中单独导入每个组件/指令/管道等。

如需进一步参考,请查看official docs

答案 1 :(得分:-1)

如果共享组件具有组件,管道和指令,则需要将共享模块导入需要它的每个功能模块。作为上述要点的例外,您必须在以下方案中导入App模块中的共享模块:

  • 使用延迟加载,并在不同的功能模块之间共享服务,并且需要在功能模块之间创建和共享该服务的单个实例。

    import { ModuleWithProviders } from '@angular/core';
    import { SampleService } from './services/sample';
    
    @NgModule({
      declarations: [],
      imports: [],
      exports: []
    })
    
    export class SharedComponentsModule {
      static forRoot(): ModuleWithProviders {
        return {
            ngModule: SharedComponentsModule,
            providers: [SampleService]
        };
    }}
    //Import the module with Provider in AppModule :
    Imports: [
    SharedComponentsModule.forRoot()
    ]