Angular 2 - Маршрутизация субмодулей и вложенный <роутер-выход>
Я ищу решение с Angular 2 для сценария, описанного ниже:
![введите описание изображения здесь]()
В этом случае верхний навигатор содержит ссылки для загрузки подмодулей, а суб-навигатор имеет ссылки для обновления содержимого подмодуля.
URL-адреса должны отображаться как:
- /home = > загружает домашнюю страницу в розетку основного компонента.
- /submodule = > загружает подмодуль в розетку маршрутизатора основного компонента и по умолчанию должен показывать домашнюю страницу субмодуля и вспомогательную панель
- /subodule/feature = > загружает функцию внутри выхода маршрутизатора подмодуля.
Модуль приложения (и компонент приложения) содержит верхнюю навигационную панель для перехода к различным подмодулям, и шаблон компонента приложения может выглядеть следующим образом:
<top-navbar></top-navbar>
<router-outlet></router-outlet>
Но вот сложность. Мне нужно, чтобы мои подмодули имели аналогичную компоновку с навигационной панелью второго уровня и собственной розеткой маршрутизатора для загрузки своих компонентов.
<sub-navbar></sub-navbar>
<router-outlet name='sub'></router-outlet>
Я пробовал все варианты и искал везде, но не смог найти решение иметь шаблон по умолчанию (например, компонент приложения) в подмодуле с выходом маршрутизатора, а также загружать содержимое субмодуля во внутреннюю розетку маршрутизатора, не теряя при этом суб-нав.
Я был бы признателен за любые материалы или идеи
Ответы
Ответ 1
HTML-страница будет выглядеть следующим образом.
Главная страница
<top-navbar></top-navbar>
<router-outlet></router-outlet>
Страница субмодуля
<sub-navbar></sub-navbar>
<router-outlet name='sub'></router-outlet>
при нажатии на навигацию в верхней навигационной панели будет выведен основной маршрут.
при нажатии на sub-navbar маршрутизатор-розетка [sub] будет маршрутизироваться соответственно.
HTML в порядке, трюк придет при написании app.routing
app.routing.ts
const appRoutes: Routes = [
{
path: 'login',
component: LoginComponent
},
{ path: 'home',
component: homeComponent,
children: [
{
path: 'module1',
component: module1Component,
children: [
{
path: 'submodule11',
component: submodule11Component,
},
{
path: '',
redirectTo: 'submodule11',
pathMatch: 'full'
}
]
},
{
path: 'module2',
component: module2omponent,
children: [
{
path: 'submodule21',
component: submodule21Component,
},
{
path: '',
redirectTo: 'submodule21',
pathMatch: 'full'
}
]
}
]
},
{
path: 'about',
component: aboutComponent
}
]
Надеюсь, это поможет вам.
Подробнее https://angular.io/guide/router
Ответ 2
Использование:
RouterModule.forChild()
...
<router-outlet name="sub"></router-outlet>
...
[routerLink]="[{ outlets: { sub: [subRouteName] } }]"
Полный пример:
HTML
<div class="tabs tinyscroll">
<button *ngFor="let tab of tabs"
[routerLink]="[{ outlets: { sub: [tab.name] } }]"
routerLinkActive="selected">
<span>{{ tab.label }}</span>
</button>
</div>
<section>
<router-outlet name="sub"></router-outlet>
</section>
app.module.ts
imports: [
...
RouterModule.forChild([
{
path: 'registers',
component: RegistersComponent,
children: [
{path: 'vehicles', component: VehiclesComponent, outlet: 'sub'},
{path: 'drivers', component: DriversComponent, outlet: 'sub'},
{path: 'bases', component: BasesComponent, outlet: 'sub'},
{path: 'lines', component: LinesComponent, outlet: 'sub'},
{path: 'users', component: UsersComponent, outlet: 'sub'},
{path: 'config', component: ConfigComponent, outlet: 'sub'},
{path: 'companies', component: CompaniesComponent, outlet: 'sub'}
],
canActivate: [AuthGuard]
}
]),
...
Ответ 3
вы должны указать название розетки на маршрутах
укажите название маршрутизатора в маршрутизации, например, этот "выход:
routes: Routes = [
{path:'', redirectTo: 'login', pathMatch: 'full'},
{
path: 'login',
component: LoginComponent,
},
{ path: 'home',
component: AppComponent,
children: [
{path: 'home/pdf',component: SideMenuPage,outlet:"sub" },
{path:'home/addFileUp',component:SidePageAdd,outlet:"sub"},
]},
];
Ответ 4
Это то что тебе нужно
fooobar.com/info/15125675/...
отложенная загрузка с вложенной маршрутизацией