我试图理解角度为shared module
,我见过这样的例子
import { CommonModule } from '@angular/common';
@NgModule({imports:[CommonModule], exports:[CommonModule]})
export class SharedModule{}
我们正在导入CommonModule并导出CommonModule,因此我们不需要导入CommonModule,但我们在app start导入BrowserModule
并导入`CommonModule。是否需要重新导出CommonModule?还请详细解释共享模块究竟是什么?
答案 0 :(得分:2)
共享模块基本上是收集其他模块中使用的所有声明并导出它们的模块。例如,AComponent
模块中有A
,BComponent
模块中有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