2017-05-29 5 views
1

Ich versuche, dynamisch Routen in meinem Winkel AppDynamisches Hinzufügen von Routen in Angular

const routes: Routes = [ 
// my static routes 
]; 

let sections = localStorage.getItem('sections'); 

if (sections) { 
    JSON.parse(sections).forEach(section => { 
    routes.push({ path: section.route, component: SectionComponent }); 
    }); 
} 

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

Dies funktioniert gut in dev hinzufügen, aber in einer Produktion, um die dynamischen Routen bauen nicht hinzugefügt werden. Ich habe versucht, eine Fabrik zu verwenden, um sicherzustellen, dass die Route hinzugefügt wird, aber es schlägt fehl, mit einem Funktionsaufruf zu erstellen.

@NgModule({ 
    imports: [RouterModule.forRoot(myRouteFactory())], 
    exports: [RouterModule] 
}) 
export class AppRoutingModule { 
} 

Ich habe auch versucht, meine Abschnitt Komponente als Default-Route einstellen, die meistens funktioniert, aber wenn ich von einem Abschnitt zum anderen gehen es nicht eine Route ändern und es bleibt auf dem ersten auslösen.

const routes: Routes = [ 
    { path: '**', component: SectionComponent } 
]; 

Wenn ich zu http://myap.com/firstsection gehe, funktioniert es gut. Wenn ich dann zu http://myap.com/secondsection gehe, bleibt es im ersten Abschnitt, obwohl die URL geändert hat.

Wenn ich dann gehe zu http://myap.com/oneofmystaticroutes dann zu http://myap.com/secondsection es funktioniert gut.

Antwort

0

Ich denke, das Problem ist irgendwo in AOT.

Mein Vorschlag wäre mount route config zu AppComponent. Inject Router und Routen dann fügen Sie Routen, die Sie brauchen dann resetConfig

routes.push({ path: section.route, component: SectionComponent }); 
router.resetConfig(routes); 
+0

, das so zu sein scheint, zu nutzen versuchen. Die Variablen werden in AOT entfernt. Die Problemumgehung 'router.resetConfig (routes)' scheint momentan der einzige Weg zu sein. Ich habe dieses Problem auf [Github] angesprochen (https://github.com/angular/angular-cli/issues/6784). Hoffe, wir bekommen bald eine Lösung. – Krishnan

+0

Wissen Sie, wie Sie dasselbe für ein faules Modul tun? Wenn Sie router.resetConfig in 'lazy-loaded-routing.module.ts' ausführen, wird die Routing-Konfiguration der übergeordneten App-routing.module.ts zurückgesetzt. – Krishnan

Verwandte Themen