我有一个使用 CoreModule
和 SharedModule
模式的小 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/