在app start导入BrowserModule时需要重新导出CommonModule吗?

时间:2017-07-20 19:18:22

标签: angular

我试图理解角度为shared module,我见过这样的例子

import { CommonModule } from '@angular/common';
@NgModule({imports:[CommonModule], exports:[CommonModule]})
export class SharedModule{}

我们正在导入CommonModule并导出CommonModule,因此我们不需要导入CommonModule,但我们在app start导入BrowserModule并导入`CommonModule。是否需要重新导出CommonModule?还请详细解释共享模块究竟是什么?

1 个答案:

答案 0 :(得分:2)

共享模块基本上是收集其他模块中使用的所有声明并导出它们的模块。例如,AComponent模块中有ABComponent模块中有B。您想在模块C中使用它们。所以你必须这样做:

@NgModule({
   imports: [ModuleA, ModuleB]
   ...
})
export class ModuleC {}

但是,你可以在一些共享模块中收集它们:

@NgModule({
   imports: [ModuleA, ModuleB],
   exports: [ModuleA, ModuleB]
   ...
})
export class SharedModule {}

然后只需导入SharedModule

@NgModule({
   imports: [SharedModule]
   ...
})
export class ModuleC {}

您可以导入它,以便在共享模块中声明的组件可以使用CommonModule声明。如果您未在SharedModule上定义任何声明,则只需导出CommonModule而无需导入。

@NgModule({
   imports: [], // don't need to import if modules doesn't have declarations
   exports: [ModuleA, ModuleB]
   ...
})
export class SharedModule {}
  

但我们正在app start导入BrowserModule并导入   `CommonModule

足以导入导入所需模块一次的模块。 但是,您需要将声明的模块导入到使用其他模块声明的每个模块中。因此,即使您将BrowserModule导入AppModule,仍然需要将CommonModule导入到使用公共声明(组件,指令和管道)的其他模块中。因此,您不能将BrowserModule导入这些模块,导入SharedModule