Szukam rozwiązania z Angular 2 dla scenariusza wyjaśnionego poniżej:
W tym scenariuszu nawigacja górna zawiera łącza do ładowania modułów podrzędnych, a nawigacja podrzędna - łącza do aktualizowania zawartości modułu podrzędnego.
Adresy URL powinny być mapowane jako:
- / home => ładuje stronę główną w gniazdku routera głównego komponentu
- / submodule => ładuje moduł podrzędny do gniazda routera głównego komponentu i domyślnie powinien pokazywać stronę domową modułu podrzędnego i podrzędny pasek nawigacyjny
- / submodule / feature => ładuje funkcję wewnątrz gniazda routera submodułu
Moduł aplikacji (i komponent aplikacji) zawiera górny pasek nawigacyjny do przechodzenia do różnych modułów podrzędnych, a szablon komponentu aplikacji mógłby wyglądać następująco
<top-navbar></top-navbar>
<router-outlet></router-outlet>
Ale tutaj jest złożoność. Potrzebuję, aby moje moduły podrzędne miały podobny układ z paskiem nawigacyjnym drugiego poziomu i własnym gniazdem routera do ładowania własnych komponentów.
<sub-navbar></sub-navbar>
<router-outlet name='sub'></router-outlet>
Wypróbowałem każdą opcję i szukałem wszędzie, ale nie mogłem znaleźć rozwiązania, aby mieć domyślny szablon (taki jak komponent aplikacji) w module podrzędnym z gniazdem routera, a także załadować zawartość modułu podrzędnego do wewnętrznego gniazda routera bez utraty nawigacji podrzędnej .
Byłbym wdzięczny za wszelkie uwagi lub pomysły
Odpowiedzi:
Strona html będzie wyglądać następująco.
Strona główna
Strona modułu podrzędnego
po kliknięciu nawigacji w górnym pasku nawigacyjnym, główna trasa wylotowa zostanie odpowiednio poprowadzona.
Klikając na podrzędnym pasku nawigacyjnym, wyjście routera [sub] będzie odpowiednio kierować.
HTML jest w porządku, sztuczka pojawi się podczas pisania app.routing
app.routing.ts
Mam nadzieję, że to ci pomoże.
Więcej szczegółów https://angular.io/guide/router
źródło
router-outlet
dyrektywy nie trzeba nazywać. Oto przykład: github.com/gothinkster/angular-realworld-example-app/blob/ ...Posługiwać się:
Pełny przykład:
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] } ]), ...
źródło
musisz wspomnieć nazwę gniazdka w trasach, wspomnieć nazwę gniazda routera w routingu, na przykład „outlet: 'sub”
źródło