2017-11-29 11 views
0

Ich möchte ein generisches Modul erstellen, das ich einige Konfig übergeben kann, um es anzupassen. Zum Beispiel in der Root-Modul mag ich so etwas wieWiederverwendung des gleichen NgModul mit anderen Konfig

@NgModule({ 
    imports: [ 
     moduleFactory(config1), 
     moduleFactory(config2), 
     moduleFactory(config3) 
    ], 
}) 
export class AppModule { } 

Die moduleFactory ein Modul haben, mit Routen zurück, die basierend auf configx Objekte gebaut werden. Diese Module bieten einige Ansichten, in denen basierend auf dem Konfigurationsobjekt benutzerdefinierte Inhalte angezeigt werden. Wie kann ich das machen?

+0

Es gibt eine Möglichkeit, das mit 'ModuleWithProviders' zu tun, aber wenn Sie einige Logik, die Laufzeitausführung in' moduleFactory' erfordert, wird es nicht mit AOT –

+0

@ AngularInDepth.com Das Hauptproblem, das ich habe, ist nur mit AOT. Jetzt habe ich nur das Haupt 'NgModule', das die Routen definiert, und im route config array rufe ich eine Funktion auf, die ein route Objekt config zurückgibt und wenn ich' ng serve' starte, kommt ein Fehler: Fehler beim statischen Auflösen der Symbolwerte. Aufruf der Funktion 'admin', Funktionsaufrufe werden nicht unterstützt. Lohnt es sich, AOT aufzugeben, um weniger Code zu haben? Ich verstehe AOT nicht sehr gut und ich kenne nicht die Vorteile, es zu benutzen. – csbenjamin

+0

Ja, das ist zu erwarten, statische Analyse bewertet den Code nicht. Nein, es lohnt sich nicht, AOT aufzugeben. Der Compiler benötigt etwa 40% des Angular-Codes, den Sie an einen Browser liefern, der nicht mit AOT geliefert wird und mit vorkompilierten Komponenten erhalten Sie auch Startup-Zeit. –

Antwort

0

Ich kam mit einer Lösung loadChildren. In der Hauptroute Config habe ich so etwas wie diese:

{ 
    path:'companies', 
    loadChildren: 'app/admin/admin.module#AdminModule', 
    data:{ 
     // the config1 
    } 
}, 

{ 
    path:'users', 
    loadChildren: 'app/admin/admin.module#AdminModule', 
    data:{ 
     // the config2 
    } 
} 

Dann wird in den AdminModule kann ich die data Eigenschaft lesen. Außerdem habe ich versucht, absolute Routenpfade in AdminModule Routen zu definieren, aber jetzt, mit der loadChildren Lösung, kann ich relative Pfade definieren, daher kann ich die Routen statisch definiert haben und AOT funktioniert einfach :). Ich habe so etwas wie dies in den AdminModule Routen:

{ 
    path: '', 
    component: TablePageComponent, 
}, 
{ 
    path: 'item', 
    component: FormPageComponent, 
} 

Damit ich /users und einen bestimmten Benutzer mit der Route /users/item;id=1 die Benutzer-Tabelle mit der Route laden kann. Gleiches gilt für die Unternehmen und was auch immer.

Verwandte Themen