Ленивая загрузка корневых маршрутов - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь создать угловое приложение с лениво загруженными модулями с несколькими страницами:

src/app
|--app.component.ts
|--app-routing.module.ts
|--app.module.ts
|--app.component.html
|--LazyModuleA
|  |--LazyModuleA.module.ts
|  |--LazyModuleA-routing.module.ts
|  |--LazyPageA.component.ts
|  |--LazyPageA.component.html
|--LazyModuleB
   |--LazyModuleB.module.ts
   |--LazyModuleB-routing.module.ts
   |--LazyModuleB.component.ts
   |--LazyModuleB.component.html
   |--LazyPageB
   |  |--LazyPageB.component.ts
   |  |--LazyPageB.component.html
   |--LazyPageC
      |--LazyPageC.component.ts
      |--LazyPageC.component.html

LazyPageBComponent и LazyPageCComponent должны использовать LazyModuleBComponent в качестве выхода. Однако все маршруты должны быть верхнего уровня, например:

/LazyPageA (AppComponent->LazyPageAComponent)
/LazyPageB (AppComponent->LazyModuleBComponent->LazyPageBComponent)
/LazyPageC (AppComponent->LazyModuleBComponent->LazyPageCComponent)

вместо:

/LazyPageA
/LazyModuleB/LazyPageB
/LazyModuleB/LazyPageC

Поэтому я использую именованные выходы маршрутизатора в AppComponent и LazyModuleBComponent, которые должны быть вложены при переходе к LazyModuleB:

app-routing.module
''''''''''''''''''
const routes: Routes = [
    {path: 'LazyPageA', loadChildren: './LazyModuleA/LazyModuleA.module#LazyModuleA'},
    {path: '**', loadChildren: './LazyModuleB/LazyModuleB.module#LazyModuleB'}];
@NgModule({imports: [RouterModule.forRoot(routes)], exports: [RouterModule]})
export class AppRoutingModule { }

app.component
'''''''''''''
<app-root><router-outlet name="app-outlet"></router-outlet></app-root>

LazyModuleA-routing.module
''''''''''''''''''''''''''
const routes: Routes = [
    {path: '', component: LazyPageAComponent, outlet: 'app-outlet'}];
@NgModule({imports: [RouterModule.forChild(routes)], exports: [RouterModule]})
export class LazyModuleARoutingModule { }

До этого момента все работало как положено - /LazyPageA возвращает LazyPageAComponent.

LazyModuleB.component
'''''''''''''''''''''
<p>Placeholder for a sidebar added later</p>
<router-outlet name="LazyModuleB-outlet"></router-outlet>

LazyModuleB-routing.module
''''''''''''''''''''''''''
const routes: Routes = [
    {path: 'LazyPageB', component: LazyPageBComponent, outlet: 'LazyModuleB-outlet'},
    {path: 'LazyPageC', component: LazyPageCComponent, outlet: 'LazyModuleB-outlet'},
    {path: '', pathMatch: 'full', component: LazyModuleBComponent, outlet: 'app-outlet'},
    {path: '**', component: LazyModuleBComponent, outlet: 'app-outlet'}];
@NgModule({imports: [RouterModule.forChild(routes)], exports: [RouterModule]})
export class LazyModuleBRoutingModule { }

Проверяя /LazyPageB, я вижу, что указанные выходы маршрутизатора вложены, как и ожидалось, однако в LazyModuleB-outlet.

не помещается ни один компонент.

Поэтому я подозреваю ошибку в маршрутах LazyModuleB-routing.module, однако не могу найти способ заставить маршрутизацию в LazyModuleB работать.

Можно было бы определить /LazyPageB и /LazyPageC в app-routing.module и условно отобразить компоненты в LazyModuleBComponent, используя *ngIf и активный маршрут из Router, но явно вложенный розетки маршрутизатора должны делать что-то вроде этого.


Редактировать: К настоящему времени у меня есть сомнения, что это вообще невозможно, и мне, вероятно, следует переосмыслить структуру моего проекта. Если корневые маршруты должны приводить к уникальному компоненту, тогда я мог бы вообще прекратить ленивую загрузку или переупорядочить компоненты на модули, которые вместо этого используют общие модули.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...