Я ищу решение с Angular 2 для сценария, описанного ниже:
В этом сценарии верхняя навигация содержит ссылки для загрузки подмодулей, а суб-навигация содержит ссылки для обновления содержимого подмодуля.
URL-адреса должны отображаться как:
- / home => загружает домашнюю страницу в розетку основного компонента маршрутизатора
- / submodule => загружает подмодуль в выход маршрутизатора основного компонента и по умолчанию должен отображать домашнюю страницу подмодуля и вспомогательную панель навигации
- / submodule / feature => загружает функцию внутри выхода маршрутизатора подмодуля
Модуль приложения (и компонент приложения) содержит верхнюю панель навигации для перехода к различным подмодулям, а шаблон компонента приложения может выглядеть следующим образом
<top-navbar></top-navbar>
<router-outlet></router-outlet>
Но вот в чем сложность. Мне нужно, чтобы мои подмодули имели аналогичную компоновку с навигационной панелью второго уровня и собственным выходом маршрутизатора для загрузки собственных компонентов.
<sub-navbar></sub-navbar>
<router-outlet name='sub'></router-outlet>
Я пробовал все варианты и искал везде, но не смог найти решение, чтобы иметь шаблон по умолчанию (например, компонент приложения) в подмодуле с выходом маршрутизатора, а также загружать содержимое подмодуля во внутреннюю розетку маршрутизатора без потери суб-навигатора .
Буду признателен за любой вклад или идеи
Ответы:
Страница html будет выглядеть так.
Главная страница
Страница подмодуля
при нажатии на навигацию в верхней панели навигации основной выход маршрута будет направлен соответственно.
при нажатии на суб-навигационную панель маршрутизатор-выход [суб] будет маршрутизировать соответственно.
HTML в порядке, уловка будет в написании app.routing
app.routing.ts
Надеюсь, это поможет тебе.
Подробнее https://angular.io/guide/router
источник
router-outlet
директиву не нужно называть. Вот пример: github.com/gothinkster/angular-realworld-example-app/blob/…Использование:
Полный пример:
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] } ]), ...
источник
вы должны указать название розетки в маршрутах, упомянуть название розетки вашего маршрутизатора в маршрутизации, например, "розетка: 'sub"
источник