Angular使用InjectionToken错误

时间:2017-05-31 14:57:00

标签: angular

我们需要使用 InjectionToken 注入一个值,但是我们收到以下错误:

  

ERROR在遇到错误静态解析符号值。只有初始化的变量和常量可以被引用,因为这变量的值是NE   由模板编译器(在原来的.ts文件位置3:12)EDED,解析符号$在C:/Projekte/Git/KWKPortal/App/src/app/shared/dnn.module.ts,resolvin   克符号的AppModule在C:/Projekte/Git/KWKPortal/App/src/app/app.module.ts,在C解析符号的AppModule:/Projekte/Git/KWKPortal/App/src/app/app.module.ts, RESO   lving符号的AppModule在C:/Projekte/Git/KWKPortal/App/src/app/app.module.ts

以下是我们如何提供要注入的值:

import { SF, $, dnn } from './shared/dnn.module';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    HttpModule
  ],
  providers: [
    { provide: SF, useValue: $.ServicesFramework(dnn.getVars().ModuleId) }
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

以下是 dnn.module 的代码:

import { InjectionToken } from '@angular/core';

export let $: any;
export let dnn: any;
export let SF = new InjectionToken<any>('sf');

我想知道为什么会这样? useValue不适合这种情况吗?

1 个答案:

答案 0 :(得分:0)

幸运的是我能够使用工厂来解决这个问题,这里是代码:

export function servicesFrameworkFactory() {
  return $.ServicesFramework(dnn.getVars().ModuleId);
}

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    HttpModule
  ],
  providers: [{
    provide: SF,
    useFactory: servicesFrameworkFactory,
    deps: []
  }],
  bootstrap: [AppComponent]
})
export class AppModule { }

我不知道是否有更简洁的解决办法,但这解决了原来的问题。