2017-05-31 31 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 { } 

我不知道是否有這個固定的更清潔的方式,但是這解決了原來的線程。