【发布时间】:2019-08-19 18:08:46
【问题描述】:
我们的 Angular 4.3.6 应用程序具有延迟加载的模块,例如 Fleet、Maintenance、Car 等。
我的顶级应用路由器如下所示:
const routes: Routes = [
{ path: '', redirectTo: 'fleet', pathMatch: 'full' },
{
path: '',
component: AppComponent,
canActivate: [AuthenticationGuard],
children: [
{
path: 'fleet',
loadChildren: "./modules/fleet.module",
canActivate: [AuthenticationGuard]
},
{
path: 'car/:id',
loadChildren: "./modules/car.module",
canActivate: [AuthenticationGuard]
},
{
path: 'maintenanceProgram',
loadChildren: "./modules/maintenanceProgram.module",
canActivate: [AuthenticationGuard]
}
}
我们确实有一个 shared 模块,其中包含在整个应用程序中使用的通用组件(我们有很多)。但是,有些组件(如模态)仅由 MaintenanceProgram 和 Car 模块共享,但在其他任何地方都不使用。
为了保持共享模块的合理性,我只在MaintenanceProgram 模块中包含这些曾经重用的组件,导出它们,然后将MaintenanceProgram 模块导入Car 模块以访问导出的组件。
Car 和 MaintenanceProgram 模块都在各自的@NgModule.imports[] 中调用了以下嵌入式子路由:
汽车:
const CarModuleRoutes = RouterModule.forChild([
{
path: '',
component: CarComponent,
canActivate: [AuthenticationGuard]
},
{
path: ':id',
component: CarComponent,
canActivate: [AuthenticationGuard]
}
]);
和维护计划:
const MaintenanceProgramModuleRoutes = RouterModule.forChild([
{
path: '',
component: MaintenanceProgramComponent,
canActivate: [AuthenticationGuard]
}
]);
这显然也不是正确的做法
- 到子路由,或
- 到模块嵌入
因为当我加载 Car 路线时,我得到了维护程序的默认路线。
我试过了:
- 更改
CarModule的@NgModule.imports[]中MaintenanceProgramModuleRoutes和CarModuleRoutes的导入顺序, - 从 CarModule 中删除空路径。
*是创建另一个共享模块的唯一解决方案,该模块包含共享组件而无需路由器,还是有另一种更优雅的方法来做到这一点?*
这是一个简化的例子,我们实际上有很多路由和数百个组件,它们只被重用了两到三次。随着应用程序的增长,这个问题肯定会持续到未来,所以我需要一个可扩展且可维护的解决方案。创建数十个或更多额外的共享模块是不可行的。
【问题讨论】:
-
我认为您正在进入的是循环依赖,模块 A 使用 B,而 B 使用 C。但是C再次使用A。我今天回答了这样一个问题可能是this帮助
-
这里都将调用
''const routes: Routes = [ { path: '', redirectTo: 'fleet', pathMatch: 'full' }, { path: '',跨度> -
嗨@RahulSingh,我在ng-cli 中启用了
--show-circular-dependencies,但没有收到报告。我会仔细检查.. -
@AniruddhaDas 这不是我的问题所在。当我登陆应用程序 root(root
path:'')时,我得到了 Fleet 页面。当我导航到/car/:id时,我得到了维护程序。 -
@AniruddhaDas 或者这可能是我的问题,但如果是的话,我不明白它的影响或如何解决它。
标签: angular lazy-loading angular-router