Javascript ng生成上的app.module中出现单例服务错误
我正在使用一个将在所有组件之间共享的单例服务,我创建了一个CoreModule,其静态类为:Javascript ng生成上的app.module中出现单例服务错误,javascript,angular,angular-cli,Javascript,Angular,Angular Cli,我正在使用一个将在所有组件之间共享的单例服务,我创建了一个CoreModule,其静态类为: static forRoot(config: GlobalServiceConfig): ModuleWithProviders { return { ngModule: CoreModule, providers: [ { provide: GlobalServiceConfig, useValue: config } ] };
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;
Globalsdict是在index.html中创建的,值来自后端。
现在我在app.module.ts中使用这个Globals变量,并将这个初始值提供给CoreModule.forRoot,如下所示:
imports: [
BrowserModule,
SharedModule,
LoginModule,
ShippingModule,
PaymentModule,
CoreModule.forRoot(g),
AppRoutingModule,
],
第一次ng构建失败,与ng serve/watch相同,但只是第一次。如果我做了任何更改,该应用程序将按预期运行良好,并获得初始值。但无法构建应用程序。错误状态为:
静态解析符号值时遇到错误。只有
可以引用初始化的变量和常量,因为
模板编译器需要此变量的值(位置
在原始.ts文件中为29:20),在
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中的AppModule:/repos/emtex/mobilepayment/src/app/app.module.ts,
解析中的符号AppModule
E:/repos/emtex/mobilepayment/src/app/app.module.ts
ng--版本
@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
错误很明显,您的
g
变量未初始化,因此无法静态解析。您说过g
来自后端,但angular无法知道g
何时解析(值从后端返回)
您可以通过一个承诺或一个可观察的方法来处理这个问题,在这个值返回之前,您不会引导
或者您可以将提供商更改为
useFactory
,将g
更改为承诺或可观察,然后在您的服务工厂等待g
得到解决。请参见此处的factory provider angular文档:您使用的angular的哪个版本?@angular/cli:1.0.0节点:6.9.1操作系统:win32 x64@angular/common:4.0.0@angular/compiler:4.0.0@core:4.0.0@angular/forms:4.0@angular/platform浏览器:4.0.0@angular/platform浏览器动态:4.0.0@angular/router:4.0.0.0@angular/animations:4.0.0@angular/cli:1.0.0@angular/compiler cli:4.0.0是您的angular cli
beta版(或)rc?它的最终版本@Davidr你能在你的静态类中发布你的@NgModule({providers:..})
声明吗(如果你有什么)