Путь к ленивым загружаемым модулям в Angular 5 перекрывает друг друга

У меня есть приложение с двумя модулями ленивой загрузки.

Главный модуль:

const appRoutes = RouterModule.forRoot([
    {path: '', redirectTo: '/welcome', pathMatch: 'full'},
    {
      path: 'guest',
      loadChildren: 'app/guest-module/guest.module#GuestModule',
    },
    {
      path: '',
      loadChildren: 'app/user-module/user.module#UserModule',
    },
    {path: '**', component: NopageComponent},
  ],
);

Дочерний модуль 1 (GuestModule):

  const viewRoutes = RouterModule.forChild([
     {path: 'overview/:reportId', component: HistoryOverviewComponent, canActivate: [GuestAuthGuard]},
  ]);

Дочерний модуль 2 (UserModule):

  const viewRoutes = RouterModule.forChild([
     {path: 'overview/:reportId', component: HistoryOverviewComponent, canActivate: [UserAuthGuard]},
  ]);

Когда я перехожу к / guest / overview / 1, он всегда попадает в UserAuthGuard. Это нормально, что детские маршруты накладываются друг на друга?

Есть ли способ отличить их по конфигурации, а не по имени?

Я использую angular 5.2.9 с angular cli 1.7.3.


person Rafał Kaczmarek    schedule 04.04.2018    source источник


Ответы (1)


я думаю, твоя проблема в

{
  path: '',
  loadChildren: 'app/user-module/user.module#UserModule',
},

вы должны указать имя для этого пути или добавить pathMatch: 'full', чтобы избежать перенаправления на путь пользователя, я предлагаю следующее:

 {
   path: 'guest',
   loadChildren: 'app/guest-module/guest.module#GuestModule',
 },
 {
   path: 'user',
   loadChildren: 'app/user-module/user.module#UserModule',
 },
 {path: '**', component: NopageComponent},

or:

 {
   path: 'guest',
   loadChildren: 'app/guest-module/guest.module#GuestModule',
 },
 {
   path: '',
   loadChildren: 'app/user-module/user.module#UserModule',
   pathMatch: 'full'
 },
 {path: '**', component: NopageComponent},
person Fateh Mohamed    schedule 04.04.2018
comment
Нет, я уже пробовал это раньше, и это не работает. Похоже, что-то изменилось в сопоставлении путей маршрутизатора - ему не известны префиксы, определенные в корне. - person Rafał Kaczmarek; 04.04.2018
comment
К сожалению, второй ответ тоже не работает. Если я добавлю pathMath: 'full', тогда angular не сможет загрузить ни один путь, определенный в модуле. Однако ваши ответы привели меня к рабочему решению. Если я объединю два модуля и использую pathMatch: 'full', то маршрутизация начнет работать так, как ожидалось. const viewRoutes = RouterModule.forChild([ {path: 'overview/:reportId', component: HistoryOverviewComponent, canActivate: [GuestAuthGuard], pathMatch: 'full'}, {path: 'guest/overview/:reportId', component: HistoryOverviewComponent, canActivate: [GuestAuthGuard]}, ]); - person Rafał Kaczmarek; 04.04.2018
comment
Сейчас можно использовать слияние двух ленивых загружаемых модулей, но в дальнейшем я все равно хотел бы иметь два отдельных модуля. - person Rafał Kaczmarek; 04.04.2018