2017-03-27 30 views
1

我使用這將在所有組件共享一個單獨的服務,我創建了一個CoreModule,有一個靜態類爲:單服務錯誤上納克建立

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

應用.module.ts

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

全局字典被index.html中創建的,值是從後端到來。 我現在用的這個app.module.ts全局變量,並提供這個初始值CoreModule.forRoot爲:

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

在第一NG編譯失敗,同樣有NG服務/腕錶但僅限於第一次。如果我做出任何更改,應用程序運行良好,並獲得初始值。但無法構建應用程序。錯誤狀態爲:

遇到錯誤遇到靜態解析符號值。只有 可以引用初始化變量和常量,因爲模板編譯器需要此變量的 值(原始.ts文件中的位置 29:20),解析符號Globals E:/ repos/emtex/mobilepayment/src/app/app.module.ts,在E:/repos/emtex/mobilepayment/src/app/app.module.ts中解析符號g ,解析 符號AppModule在 E:/ repos/emtex/mobilepayment/src /app/app.module.ts,解析符號 E:/repos/emtex/mobilepayment/src/app/app.module.ts中的AppModule, 解析符號AppModule E:/ repos/emtex/mobilepayment/src/app/app.module.ts

納克--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

您正在使用哪個版本的Angular? –

+0

@角/ CLI:1.0.0 節點:6.9.1 操作系統:win32的64 @角/共同:4.0.0 @角/編譯器:4.0.0 @角/芯:4.0.0 @angular/forms:4.0.0 @ angular/http:4.0.0 @ angular/platform-b​​rowser:4.0.0 @ angular/platform-b​​rowser-dynamic:4.0.0 @ angular/router:4.0.0 @角度/動畫:4.0.0 @ angular/cli:1.0.0 @ angular/compiler-cli:4.0。0 –

+0

您的'angular-cli'是一個beta版本(或)rc嗎?其最終版本爲 –

回答

2

的錯誤是明顯的,你g變量沒有被初始化,爲此它不能靜態地解決。你說g來自後端,但沒有辦法知道什麼時候g已解決(價值從後端返回)

你可以用一個承諾或一個可觀察的地方處理這個問題,直到該值到來背部。

或者您可以將您的供應商更改爲useFactory並將g更改爲承諾或可觀察到,然後在您的服務工廠等待g待解決。請參閱工廠提供商的角度文檔:https://angular.io/docs/ts/latest/guide/dependency-injection.html#!#factory-provider