我有一个包含大量模块的应用程序。它完美地工作。我想让一个模块延迟加载,因为它不经常被普通用户点击。
所以,我将 LazyModule 的路由更改为 use loadChildren
,主应用程序仍然可以加载,但是当我尝试点击 LazyModule 的子路由之一时,它给了我这个错误:
错误:未捕获(承诺):错误:组件 HomeComponent 不是任何 NgModule 的一部分,或者该模块尚未导入到您的模块中。
在 LazyModule 中不使用 HomeComponent。它是不同模块的一部分,称为 MainModule。
MainModule 和 LazyModule 都从 ComponentsModule 导入和导出,然后将其导入 app.module。
还有一个 SharedModule 被导入到所有其他提到的模块中。
所以我的问题:
- 为什么 LazyModule 完全不依赖 MainModule 时会尝试在 MainModule 中加载组件?
- 为什么它适用于普通路由,但不适用于延迟加载?
在此先感谢您的帮助。
模块在这里:
懒惰模块
import ...;
const routes: Routes = [
{
path: '',
redirectTo: '/lazy-page/1',
pathMatch: 'full'
},
{
path: '1',
component: LazyPage1Component
}
];
@NgModule({
imports: [
RouterModule.forChild(routes),
SharedModule
],
declarations: [
LazyPage1Component
]
})
export class LazyModule { }
主模块
import ...;
@NgModule({
imports: [
SharedModule
],
declarations: [
HomeComponent
],
exports: [
HomeComponent
]
})
export class MainModule { }
组件模块
import ...;
@NgModule({
imports: [
SharedModule,
MainModule,
LazyModule
],
declarations: [],
exports: [
SharedModule,
MainModule,
LazyModule
]
})
export class ComponentsModule { }
应用模块
import ...;
@NgModule({
imports: [
ComponentsModule
],
declarations: [
AppComponent
],
providers: [{provide: APP_BASE_HREF, useValue : '/' }],
bootstrap: [AppComponent]
})
export class AppModule { }
应用路由模块
const routes: Routes = [
{
path: '',
component: HomeComponent
},
{
path: 'lazy-page',
loadChildren: './components/lazy/lazy.module#LazyModule',
},
编辑:我现在找到了一个解决方法,但我真的想要一个合适的解决方案。hack 只是将我的应用程序中的每个模块都导入到 LazyModule 和 AppModule 中。这是一个糟糕的解决方案,因为拥有延迟加载模块的整个想法是将其与应用程序的其余部分分离,因为它是独立的。我不想将所有内容都导入两次,我也不应该这样做,因为导入的模块都没有在 LazyModule 中使用或引用过。