我正在使用将在所有组件之间共享的单件服务,我创建了一个 CoreModule ,具有静态类:
static forRoot(config: GlobalServiceConfig): ModuleWithProviders {
return {
ngModule: CoreModule,
providers: [
{ provide: GlobalServiceConfig, useValue: config }
]
};
}
在 app.module.ts
中export declare var Globals: GlobalServiceConfig;
export const g = Globals;
Globals dict是在index.html中创建的,值来自后端。 现在我在app.module.ts中使用这个Globals变量,并将此初始值提供给CoreModule.forRoot:
imports: [
BrowserModule,
SharedModule,
LoginModule,
ShippingModule,
PaymentModule,
CoreModule.forRoot(g),
AppRoutingModule,
],
首次构建时失败,与ng serve / watch相同,但仅限第一次使用。如果我做了任何更改,应用程序正在按预期正常运行并获得初始值。但无法构建应用程序。错误说明如下:
ERROR in Error遇到静态解析符号值。只要 可以引用初始化变量和常量,因为 模板编译器需要此变量的值(位置 原始.ts文件中的29:20),解决符号Globals in E:/repos/emtex/mobilepayment/src/app/app.module.ts,解析符号g 在E:/repos/emtex/mobilepayment/src/app/app.module.ts,解决 符号AppModule in E:/repos/emtex/mobilepayment/src/app/app.module.ts,解析符号 E:/repos/emtex/mobilepayment/src/app/app.module.ts中的AppModule, 解决符号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 :(得分:2)
错误很明显,您的g
变量未初始化,因此无法静态解析。你说g
来自后端,但是角度无法知道何时解析g
(从后端返回值)
你可以使用promise或observable来处理这个问题,或者在你返回该值之前不进行引导。
或者您可以将提供商更改为useFactory
并将g
更改为承诺或可观察,然后在服务工厂中等待g
解决。请在此处查看工厂提供商的angular doc:https://angular.io/docs/ts/latest/guide/dependency-injection.html#!#factory-provider