当我们在应用程序启动时导入浏览器模块时,需要重新导出公共模块吗?



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

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

我们正在导入 CommonModule 并导出 CommonModule,这样我们就不需要导入 CommonModule,但我们在应用程序启动时导入BrowserModule,它会导入"CommonModule"。是否有必要重新导出通用模块?也请解释一下共享模块到底是什么?

共享模块基本上是收集其他模块中使用的所有声明并导出它们的模块。例如,您在A模块中具有AComponentB模块中有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

最新更新