【发布时间】:2017-05-16 20:42:48
【问题描述】:
我创建了一个成功延迟加载的 AccountModule,但是当我将我的 SharedModule 添加到 AccountModule 时,我的应用似乎忘记了我所有急切加载的模块,并且出现错误:
组件 FoodComponent 不是任何 NgModule 的一部分,或者该模块尚未导入到您的模块中。
其中FoodComponent 是一个急切加载的组件,在通过延迟加载调用AccountModule 之前,它都已正确加载和渲染。如果我从应用程序中删除该组件,那么下一个急切加载的组件会发送相同的问题。我的SharedModule 是什么导致了这一切?
shared.module.ts
// ... imports ...
@NgModule({
imports: [
CommonModule,
MaterialModule.forRoot(),
ReactiveFormsModule,
AppRoutingModule
],
declarations: [
CalNavComponent,
IngredientsListComponent,
],
exports: [
MaterialModule,
ReactiveFormsModule,
CommonModule,
AppRoutingModule,
CalNavComponent,
IngredientsListComponent,
],
providers: [
UserDataService
],
})
export class SharedModule { }
account.module.ts
// ... imports ...
const routerConfig: Routes = [{
path: '',
component: AccountComponent
}]
@NgModule({
imports: [
SharedModule, /* Works fine when this is gone */
RouterModule.forChild(routerConfig)
],
declarations: [
AccountComponent
],
exports:[
AccountComponent
]
})
export class AccountModule { } // adding 'default' results in "cannot find module at app/features/account/account.module"
app-routing.module.ts
const routes: Routes = [
{
path: '',
redirectTo: 'food',
pathMatch: 'full'
},
{
path: 'account',
loadChildren: 'app/features/account/account.module#AccountModule'
// component: AccountComponent, /* This worked fine*/
},
{
path: 'food',
component: FoodComponent
},
//... more paths
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule {
constructor() { }
}
【问题讨论】:
-
为什么要从共享中导出
AppRoutingModule?并不是说这是问题所在,但这是非常可疑的代码。 -
我想我已经遵循了一个过时的路由模块教程。我已经使用 ModuleWithProviders 解决了这个问题,并将其添加到
AppModule单独。我会把答案放在一起。
标签: angular typescript lazy-loading