ng build

时间:2017-03-27 06:09:40

标签: javascript angular angular-cli

我正在使用将在所有组件之间共享的单件服务,我创建了一个 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

1 个答案:

答案 0 :(得分:2)

错误很明显,您的g变量未初始化,因此无法静态解析。你说g来自后端,但是角度无法知道何时解析g(从后端返回值)

你可以使用promise或observable来处理这个问题,或者在你返回该值之前不进行引导。

或者您可以将提供商更改为useFactory并将g更改为承诺或可观察,然后在服务工厂中等待g解决。请在此处查看工厂提供商的angular doc:https://angular.io/docs/ts/latest/guide/dependency-injection.html#!#factory-provider