2017-03-27 2 views
1
bauen ng

ich ein Singleton Dienst verwende, die sich über alle Komponenten gemeinsam genutzt werden wird, habe ich eine Coremodule, als eine statische Klasse mit:Singletons Servicefehler in app.module auf

static forRoot(config: GlobalServiceConfig): ModuleWithProviders { 
    return { 
     ngModule: CoreModule, 
     providers: [ 
     { provide: GlobalServiceConfig, useValue: config } 
     ] 
    }; 
    } 

in App .module.ts

export declare var Globals: GlobalServiceConfig; 
export const g = Globals; 

Globals dict in index.html erstellt wird, wird Wert von Backend kommt. jetzt bin ich mit dieser Globals Variable in app.module.ts und bieten diesen Anfangswert CoreModule.forRoot als:

imports: [ 
    BrowserModule, 
    SharedModule, 
    LoginModule, 
    ShippingModule, 
    PaymentModule, 
    CoreModule.forRoot(g), 
    AppRoutingModule, 
    ], 

auf erste ng build versagt, das gleiche mit ng dienen/watch aber nur für die erste Zeit . Wenn ich irgendwelche Änderungen mache, läuft die App wie erwartet und auch die Anfangswerte erhalten. aber nicht in der Lage, die App zu bauen. Der Fehler lautet wie folgt:

Fehler in Error gefunden Symbolwerte statisch auflösen. Nur initialisierte Variablen und Konstanten können referenziert werden, da der Wert dieser Variablen vom Vorlagencompiler benötigt wird (Position 29:20 in der ursprünglichen .ts Datei), auflösendes Symbol Globals in E:/repos/emtex/mobilepayment/src/app/app.module.ts, auflösendes Symbol g in E: /repos/emtex/mobilepayment/src/app/app.module.ts, Auflösung Symbol AppModule in E:/repos/emtex/mobilepayment/src /app/app.module.ts, auflösendes Symbol AppModule in E: /repos/emtex/mobilepayment/src/app/app.module.ts, Auflösung Symbol AppModule in E:/repos/emtex/mobilepayment/src/app/app.module.ts

ng --Version

@angular/cli: 1.0.0 
node: 6.9.1 
os: win32 x64 
@angular/common: 4.0.0 
@angular/compiler: 4.0.0 
@angular/core: 4.0.0 
@angular/forms: 4.0.0 
@angular/http: 4.0.0 
@angular/platform-browser: 4.0.0 
@angular/platform-browser-dynamic: 4.0.0 
@angular/router: 4.0.0 
@angular/animations: 4.0.0 
@angular/cli: 1.0.0 
@angular/compiler-cli: 4.0.0 
+0

Welche Version von Angular verwenden Sie? –

+0

@ Winkel/cli: 1.0.0 node: 6.9.1 OS: Win32 x64 @ Winkel/common: 4.0.0 @ Winkel/Compiler: 4.0.0 @ Winkel/core: 4.0.0 @angular/forms: 4.0.0 @ Winkel/http: 4.0.0 @ Winkel/Plattform-Browser: 4.0.0 @ Winkel/Plattform-Browser-dynamisch: 4.0.0 @ Winkel/Router: 4.0.0 @ eckig/Animationen: 4.0.0 @ eckig/cli: 1.0.0 @ eckig/compiler-cli: 4.0.0 –

+0

Ist dein 'angular-cli' eine Beta-Version (oder) rc? –

Antwort

2

Der Fehler klar ist, Ihre g Variable wird nicht initialisiert, dafür ist es nicht statisch aufgelöst werden kann. Sie sagte g von Back-End kommt, aber es gibt keine Möglichkeit für Winkel zu wissen, wann g aufgelöst wird (Wert wird vom Backend zurückgegeben)

du mit dem Versprechen verarbeiten kann oder eine beobachtbare wo Sie Bootstrap nicht bis zu diesem Wert kommt zurück.

Oder Sie können Ihren Anbieter zu useFactory wechseln und g zu einem Versprechen oder beobachtbar dann in Ihrer Service Factory warten auf g zu lösen. Siehe eckiges Dokument für Hersteller: https://angular.io/docs/ts/latest/guide/dependency-injection.html#!#factory-provider