javascript - 为什么共享模块导入不会失败?

标签 javascript angular typescript import module

我有一个使用 CoreModuleSharedModule 模式的小 Angular 应用程序。因为 目前我的应用程序很小,我在根模块 AppModule 中导入了 SharedModule。我还有一个名为 AdminModule 的延迟加载管理模块,但它似乎无法访问共享模块,即使它已导入到根模块中。我必须再次显式导入 SharedModule 才能在管理模块的组件中使用它。为什么是这样?如果我必须在每个延迟加载的模块中再次重新导入它们,那么将它们导入根模块有什么意义?

应用模块

...
imports: [
    BrowserModule,
    BrowserAnimationsModule,
    MatExpansionModule,
    AppRoutingModule,
    AngularFireModule.initializeApp(environment.firebase),
    AngularFirestoreModule, // imports firebase/firestore, only needed for database features
    AngularFireAuthModule, // imports firebase/auth, only needed for auth features,
    AngularFireStorageModule, // imports firebase/storage only needed for storage features
    SharedModule, // To be imported on each feature module, instead of AppModule. For now, this is fine though
    CoreModule,
    HttpClientModule
  ],
...

应用路由模块(延迟加载)

const routes: Routes = [
  {
    path: 'admin',
    loadChildren: './admin/admin.module#AdminModule',
    canActivate: [AdminAuthGuard]
  }]

管理模块

...
imports: [CommonModule, AdminRoutingModule, SharedModule, CoreModule],

例如,如果我在 SharedModule 中有一个页脚组件,并尝试在我的 AdminHomeComponent 中使用它,它是 AdminModule 的一部分>,我得到一个错误(没有导入 SharedModule)。导入时一切正常。

最佳答案

导入模块让导入外部模块的模块的组件能够看到导入模块中的组件。但仅限于该模块中的模块,而不是嵌套模块中的模块。

在根模块中导入模块对 PROVIDERS 很有用,这与 Components 有很大不同。

如果您导入一个在模块中提供服务的模块,则该模块和嵌套模块中的所有组件都将能够看到提供程序。 (这就是为什么如果模块具有将被重用的提供程序和组件,则最好将模块的提供程序仅放在静态 forRoot() 方法中的原因)。

关于javascript - 为什么共享模块导入不会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58058950/

相关文章:

javascript - 从 Node 确定Docker for Mac RAM限制

javascript - 完全删除 CSS 属性

angular - .Net Core 3.1 和 Angular 在 Visual Studio 中的编译冗长

reactjs - 如何在 TypeScript 接口(interface)中指定具有多个对象的数组?

typescript - 如何重构/抽象 ngrx 操作以减少出现拼写错误的可能性?

javascript - 它添加了第二个 } 并且不会在级别上添加 1

javascript - 如何在 Google map 上仅显示 1 个标记?

javascript - 通过@Input()传递的数据

javascript - Angular 6依赖注入(inject)

typescript - 如何从自带 .d.ts 的包中覆盖不正确的类型?