2017-05-19 2 views
1

useValue 필드를 통해 특정 값을 제공하려는 경우 앵귤러 2 공급자 구문이 작동하지 않는 이유가 궁금합니다. 내가각도 2 공급자가 useValue 및 new 함수 호출을 사용하지 않습니다.

// 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 중에 오류가 발생하려고 가지고있는 app.module.ts에 예를 들어

:

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 구성)은 정적으로 분석 할 수없는 코드를 허용하지 않습니다. 하나는이

export function UseClassFunction(){ return function() { return new Foo(new Bar());}} 처럼 보이는 TS 파일을 만들고이

처럼 그냥 오류 상태와 같은 기능을 내보낼가 그렇게하고 그것을 가져

useValue에 사용하기 위해

{provide: Base, useValue: UseClassFunction}