2017-05-23 17 views
0

Ich versuche, dynamische Routen Array für RouterModule zu erstellen. Wie in don't and do's erklärt, ich bin Export eine Funktion als meine Routen Array zu verwenden:Angular AOT: Funktionsaufrufe werden nicht unterstützt

export function DynamicRoutingCreation() { 
    let myRoutes; 
    // .. forEach loop to create dynamic array 

} 

und in meinem AppModule:

const APP_ROUTES: Routes = DynamicRoutingCreation(); 
... 

RouterModule.forRoot(APP_ROUTES) 

Aber ich erhalte immer diese Fehlermeldung:

Error ... Calling function 'DynamicRoutingCreation' , function calls are not supported. Consider replacing the function or lambda with a reference to an exported function. 

Antwort

0

Ich habe eine Abhilfe dafür gefunden - anstatt RouterModule eine Funktionsreferenz zu übergeben, habe ich Folgendes getan:

innen AppModule.ts

.. 
RouterModule.forRoot([]) // pass an empty routes 
.. 

später innen AppComponent, Zurücksetzen der Router mit dynamischen Arrays:

router.resetConfig(/* dynamic function returning routes array */) 

, die ohne Nebenwirkungen gearbeitet

0

Dies kann durch Bereitstellen Routen Definition ROUTES gelöst werden mit Funktion Factory ... (getestet auf Angular 4.1.2)

Ändern 10

Ihre AppModule (app.module.ts):

Änderung RouterModul.forRoot Importe Array

imports: [ 
RouterModule.forRoot(routes) 
... 

zu

RouterModule.forRoot([]) 

Fügen Sie diese beiden Anbieter in Provider-Array:

... ANALYZE_FOR_ENTRY_COMPONENTS 
} from '@angular/core'; 
... ROUTES, 
} from '@angular/router'; 
... 
providers: [ 
{provide: ANALYZE_FOR_ENTRY_COMPONENTS, multi: true, useValue: routes}, 
{provide: ROUTES, multi: true, useFactory: getRoutes}, 
... 

Factory-Funktion definieren (oben in der Datei app.module.ts):

export function getRoutes() { 
    return routes; 
} 

vielleicht brauchen Sie auch neue Datei zB erstellen: app.routes.ts und setzen Sie Ihre dynamische Routen-Definitionen gibt zB .:

export let routes: Routes = [ 
      { 
       path: '', 
... 
routes.push(objwithsome new route) etc.. 
... 

und importieren Sie es in AppModule (app.module.ts).

import { routes } from './app.routes'; 
Verwandte Themen