我试图理解角度的shared module
,我见过这样的例子
import { CommonModule } from '@angular/common';
@NgModule({imports:[CommonModule], exports:[CommonModule]})
export class SharedModule{}
我们正在导入 CommonModule 并导出 CommonModule,这样我们就不需要导入 CommonModule,但我们在应用程序启动时导入BrowserModule
,它会导入"CommonModule"。是否有必要重新导出通用模块?也请解释一下共享模块到底是什么?
共享模块基本上是收集其他模块中使用的所有声明并导出它们的模块。例如,您在A
模块中具有AComponent
,B
模块中有BComponent
。您想在模块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 {}
但是我们在应用程序启动时导入浏览器模块,它会导入 '通用模块
导入一次导入所需模块的模块就足够了。但是,您需要将带有声明的模块导入到使用其他模块的声明的每个模块中。因此,即使您将BrowserModule
导入AppModule
,您仍然需要将CommonModule
导入到使用公共声明(组件、指令和管道(的其他模块中。因此,您无需将BrowserModule
导入这些模块,而是导入SharedModule