我有一个小角度的应用程序,它使用CoreModule
和SharedModule
模式。因为
目前,我的应用程序很小,我已经将SharedModule
导入了根模块AppModule
中。我也有一个名为AdminModule
的延迟加载的管理模块,但即使已将其导入到根模块中,它似乎也无法访问共享模块。我必须再次显式导入SharedModule
才能在管理模块的组件中使用它。为什么是这样?如果必须在每个延迟加载的模块中再次重新导入它们,那么将它们导入到根模块中又有什么意义呢?
AppModule
...
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]
}]
AdminModule
...
imports: [CommonModule, AdminRoutingModule, SharedModule, CoreModule],
一个例子是,如果我在SharedModule
中有一个页脚组件,并尝试在AdminHomeComponent
的一部分AdminModule
中使用它,则会收到错误消息(不导入SharedModule
)。导入时一切正常。
答案 0 :(得分:2)
导入模块使导入外部模块的模块组件能够查看该导入模块中的组件。但是只有该模块中的模块,而不是嵌套模块中的模块。
在根模块中导入模块对PROVIDERS很有用,这与Components完全不同。
如果导入在模块中提供服务的模块,则该模块和嵌套模块中的所有组件都将能够看到提供程序。 (这就是为什么最好的做法是,如果模块的提供者和组件将被重用,则仅将模块的提供者置于静态的forRoot()方法中。)
答案 1 :(得分:0)
我还在另一篇https://stackoverflow.com/a/43153529/8948458
上找到了一个很好的答案创建新模块(无论是否懒惰),任何新模块并在其中声明任何内容的那一刻,该新模块便处于干净状态。它什么都不知道,