В нашем приложении 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]
}
}
У нас есть общий модуль с общими компонентами (у нас их много), используемыми во всем приложении. Однако есть некоторые компоненты, такие как модальные окна, которые используются только модулями 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]
}
]);
Это тоже явно не правильный подход
- к дочерней маршрутизации или
- к включению модуля
потому что, когда я загружаю автомобильный маршрут, я получаю маршрут по умолчанию программы обслуживания.
Я пытался:
- Изменение порядка импорта
MaintenanceProgramModuleRoutes
иCarModuleRoutes
в@NgModule.imports[]
CarModule
, - Удаление пустого пути из CarModule.
*Единственным решением является создание еще одного общего модуля, содержащего общие компоненты, без маршрутизатора, или есть другой, более элегантный способ сделать это?*
Это упрощенный пример, на самом деле у нас есть много маршрутов и сотни компонентов, которые повторно используются только два или три раза. Эта проблема наверняка сохранится в будущем по мере роста приложения, поэтому мне нужно масштабируемое и удобное в сопровождении решение. Создание десятков и более дополнительных общих модулей просто невозможно.
''
const маршрутов: Routes = [ { path: '', redirectTo: 'fleet', pathMatch: 'full' }, { path: '', - person Aniruddha Das   schedule 01.09.2017--show-circular-dependencies
в ng-cli и не получил об этом отчет. я перепроверю.. - person msanford   schedule 01.09.2017path:''
), я получаю страницу флота. Когда я перехожу к/car/:id
, я получаю программу обслуживания. - person msanford   schedule 01.09.2017car
для вашего маршрутизатора приложений верхнего уровня, а неcar/:id
? Вы указываете id в дочерних маршрутах - person Andrew Allen   schedule 12.08.2019car:/id
работает в нашем случае, потому что это своего рода не дочерний маршрут: подcar/
больше ничего нет. Не стесняйтесь дать ответ и получить эту награду! Если нет, возможно, я опубликую наше возможное решение (но сейчас я работаю над другим проектом, поэтому мне нужно его выкопать). - person msanford   schedule 13.08.2019