2016-11-26 4 views
2

Ich habe mit dem Problem konfrontiert, Root-Routen zu überschreiben, wenn importierte untergeordnete Routen mit loadChildren() aufrufen.Angular2 Submodul forChild() Routen überschreiben Root-Routen

App Routen erklärt wie:

const routes: Routes = [ 
    { path: '', redirectTo: 'own', pathMatch: 'full' }, 
    { path: 'own', component: OwnComponent }, 
    { path: 'nested', loadChildren:() => NestedModule}, 
]; 
export const routing = RouterModule.forRoot(routes); 

Nested Submodul der Routen:

const routes: Routes = [ 
    { path: 'page1', component: NestedPage1Component }, 
    { path: 'page2', component: NestedPage2Component }, 
    { path: '', redirectTo: 'page1', pathMatch: 'full' }, 
]; 

@NgModule({ 
    imports: [RouterModule.forChild(routes)], 
    exports: [RouterModule] 
}) 
export class Module1RoutingModule {} 

Ich kann/eigene bekommen,/geschachtelte/Seite1,/geschachtelte/page2, aber wenn ich versuche, root zu bekommen/- Ich werde auf/page1 umgeleitet. Warum passiert das, wie es im untergeordneten Modul mit RouterModule.forChild deklariert ist, wie leitet es sich nicht an/own?

Ich habe für Repro einfache zupfen erstellt - https://plnkr.co/edit/8FE7C5JyiqjRZZvCCxXB?p=preview

Hat jemand dieses Verhalten erlebt?

+0

Für alle anderen, [github issue] (https://github.com/angular/angular/issues/10958) diskutiert dieses Routing-Verhalten. – makman99

Antwort

4

Hier ist Ihre gegabelt und modifizierte Plunker: https://plnkr.co/edit/XilkY55WXle2hFF0Pelx?p=preview

Sie, dass faule Lademodul nicht importieren und die Root-Routen wie folgt zu ändern:

//import { Module1Module } from "./module1/module1.module"; // do NOT import it ! 

export const routes: Routes = [ 
    { path: '', redirectTo: 'own', pathMatch: 'full' }, 
    { path: 'own', component: OwnComponent }, 
    { path: 'module1', loadChildren: 'src/module1/module1.module#Module1Module' }, 
]; 

Und die verschachtelten Routen:

const routes: Routes = [ 
    //{ path: 'page1', component: Module1Page1Component }, 
    //{ path: 'page2', component: Module1Page2Component }, 
    //{ path: '', redirectTo: 'page1', pathMatch: 'full' }, 

    // do the routes like this.. 
    { 
    path: '', 
    component: Module1Component, 
    children: [ 
     { path: '', redirectTo: 'page1', pathMatch: 'full' }, 
     { path: 'page1', component: Module1Page1Component }, 
     { path: 'page2', component: Module1Page2Component } 
    ] 
    }, 
]; 
+0

Danke, es funktioniert mit Lazy-Loading. Ich habe im Prinzip die gleiche Lösung versucht, aber gelegentlich die Importe von Kind-Modulen nicht entfernt, so dass Routen überschrieben wurden. Aber die Frage ist im Allgemeinen, wenn nicht Lazy-Loading - Routen Kinderrouten sollten Wurzelrouten nicht brechen? Sollte das nicht sowieso ein Fehler sein? – ykravch

+0

Ich würde sagen, es gehört zu der Reihenfolge der Module importiert werden .. – mxii

+1

Guter Punkt. Sie können importierte Lazy Module im App Module importieren. Andernfalls werden die Routen verwechselt. – marekozw

0

Wir brauchen einige CAPS auf dem "Importieren Sie nicht das launisch geladene Modul" :)

Das behebt ein Problem, das ich mit meinem Ansatz hatte, in einer verwandten Frage erläutert: https://stackoverflow.com/a/45718262/885259

Vielen Dank!

Verwandte Themen