2017-06-22 16 views
0

Bitte helfen Sie. Ich versuche, ein Modul abhängig vom Gerätetyp zu laden, bekomme aber einen Fehler: "ERROR in Fehler beim statischen Auflösen von Symbolwerten. Nur initialisierte Variablen und Konstanten können referenziert werden, da der Wert dieser Variablen vom Template-Compiler benötigt wird. .“istAngular 4 - Fehler beim statischen Auflösen der Symbolwerte in den Routen

Hier ist der Code:

//routing.ts

export declare var MobileDetect: any; 
export var devicePath; 

export var deviceType = new MobileDetect(window.navigator.userAgent); 
    if (deviceType.phone() != null) { 
    devicePath = 'app/mobile/mobile.module#MobileModule'; 
    } 
    else{ 
    devicePath = 'app/desktop/desktop.module#DesktopModule'; 
    } 

import { ModuleWithProviders } from '@angular/core'; 
import { Routes, RouterModule } from '@angular/router'; 

const routes: Routes = [ 
    { path: '', loadChildren: devicePath} 
]; 

export const routing: ModuleWithProviders = RouterModule.forRoot(routes); 
+0

sind Sie AOT tun? – JEY

+0

Ja Entschuldigung vergessen zu erwähnen, dass ich in AOT baue. –

Antwort

0

Wenn AOT Route verwenden, sollten statisch analysierbar sein. Was Sie versuchen können, ist ROUTEN mithilfe einer Fabrik bereitzustellen. Wechsel:

RouterModule.forRoot(routes) 

Um

RouterModule.forRoot([]); 

Und definieren diese beiden Anbieter:

providers: [ 
{provide: ANALYZE_FOR_ENTRY_COMPONENTS, multi: true, useValue: routes}, 
{provide: ROUTES, multi: true, useFactory: getRoutes}] 

(ANALYZE_FOR_ENTRY_COMPONENTS ist von @ Winkel/Kern und WEGE von @ Winkel/Router)

und die folgende Fabrik:

export function getRoutes(): Routes { 
    return routes; 
} 

Dieses Beispiel wurde entnommen aus: https://github.com/angular/angular-cli/issues/5754

Verwandte Themen