2017-05-19 26 views
1

我想知道为什么Angular 2提供程序语法在我想通过useValue字段提供特定值时不起作用。Angular 2提供程序不能使用useValue和函数调用新的

例如,在app.module.ts我

// Abstracted base class (since interfaces don't work with libraries and tsc) 
export class Base { 
    constructor(public bar:Bar) { 
    } 
} 

export class Foo extends Base { 
    constructor(public bar:Bar) { 
    super(bar); 
    } 
} 

export class Bar { 
    hello = "world"; 
} 

@NgModule({ 
    declarations: [ 
    AppComponent, 
    ], 
    imports: [ 
    ], 
    providers: [ 
    {provide: Base, useValue: new Foo(new Bar())} 
    ], 
    bootstrap: [AppComponent] 
}) 
export class AppModule { 
} 

尝试,这将引发期间ng build一个错误:我简单地使用领域得到解决此

ERROR in Error encountered resolving symbol values statically. Calling function 'Foo', function calls are not supported. Consider replacing the function or lambda with a reference to an exported function, resolving symbol AppModule in /Users/tbeauvais/Code/example-sdk/src/app/app.module.ts, resolving symbol AppModule in /Users/tbeauvais/Code/example-sdk/src/app/app.module.ts 

useClass ,然后通过如下方式指定参数deps

... 
providers: [ 
    Bar, 
    {provide: Base, useClass: Foo, deps:[Bar]} 
], 
... 

它的作品,它只是不理想,我想知道我在这里失踪。另外,我不想无缘无故地注入Bar

任何帮助将不胜感激。干杯!

+0

你应该检查:https://github.com/rangle/angular-2-aot-sandbox – echonax

回答

3

我知道这个错误听起来很神秘,但在一天结束的时候却不是。 某些配置(通常是aot-cli配置)不允许无法静态分析的代码。为了做到这一点人们必须导出函数,就像错误状态,这样

创建TS文件看起来像这样

export function UseClassFunction(){ return function() { return new Foo(new Bar());}} 然后导入,并用它在useValue

{provide: Base, useValue: UseClassFunction}

相关问题