2017-05-31 27 views
0

我们需要注入使用InjectionToken值,但我们得到了以下错误:角使用InjectionToken错误

ERROR in Error encountered resolving symbol values statically. Only initialized variables and constants can be referenced because the value of this variable is ne eded by the template compiler (position 3:12 in the original .ts file), resolving symbol $ in C:/Projekte/Git/KWKPortal/App/src/app/shared/dnn.module.ts, resolvin g symbol AppModule in C:/Projekte/Git/KWKPortal/App/src/app/app.module.ts, resolving symbol AppModule in C:/Projekte/Git/KWKPortal/App/src/app/app.module.ts, reso lving symbol AppModule in 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不适合这种情况吗?

回答

0

Fortunally我能够利用这个工厂使用解决,这里是代码:

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 { } 

我不知道是否有这个固定的更清洁的方式,但是这解决了原来的线程。