Ich suche nach einer Lösung mit Angular 2 für das unten erläuterte Szenario:
In diesem Szenario enthält das Top-Navi Links zum Laden von Submodulen und das Sub-Navi enthält Links zum Aktualisieren des Inhalts des Submoduls.
Die URLs sollten wie folgt zugeordnet sein:
- / home => lädt die Homepage in den Router-Ausgang der Hauptkomponente
- / submodule => lädt das Submodul in den Router-Ausgang der Hauptkomponente und sollte standardmäßig die Homepage und die Subnavigationsleiste des Submoduls anzeigen
- / submodule / feature => lädt das Feature in den Router-Ausgang des Submoduls
Das App-Modul (und die App-Komponente) enthält eine obere Navigationsleiste, mit der Sie zu verschiedenen Submodulen navigieren können. Die Vorlage für die App-Komponente könnte folgendermaßen aussehen
<top-navbar></top-navbar>
<router-outlet></router-outlet>
Aber hier ist die Komplexität. Meine Submodule müssen ein ähnliches Layout mit einer Navigationsleiste der zweiten Ebene und einem eigenen Router-Ausgang haben, um ihre eigenen Komponenten zu laden.
<sub-navbar></sub-navbar>
<router-outlet name='sub'></router-outlet>
Ich habe alle Optionen ausprobiert und überall gesucht, konnte jedoch keine Lösung finden, um eine Standardvorlage (wie eine App-Komponente) im Submodul mit Router-Ausgang zu haben und auch den Inhalt des Submoduls in den inneren Router-Ausgang zu laden, ohne das Sub-Navi zu verlieren .
Ich würde mich über Anregungen oder Ideen freuen
Antworten:
Die HTML-Seite sieht folgendermaßen aus.
Hauptseite
Submodul Seite
Wenn Sie in der oberen Navigationsleiste auf Navigation klicken, wird der Hauptroutenausgang entsprechend weitergeleitet.
Wenn Sie auf die Unter-Navigationsleiste klicken, wird der Router-Ausgang [Unter] entsprechend weitergeleitet.
HTML ist in Ordnung, der Trick wird beim Schreiben von app.routing kommen
app.routing.ts
Hoffe es wird dir helfen.
Weitere Details https://angular.io/guide/router
quelle
router-outlet
Direktive muss nicht benannt werden. Hier ist ein Beispiel: github.com/gothinkster/angular-realworld-example-app/blob/…Verwenden:
Vollständiges Beispiel:
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] } ]), ...
quelle
Sie müssen den Outlet-Namen in den Routen angeben. Geben Sie Ihren Router-Outlet-Namen im Routing wie folgt an: "outlet: 'sub"
quelle