2017-09-27 1 views
1

현재 호스트 환경에 종속적 인 사용자 정의 각도 라이브러리를 만들고 있습니다. 이상적으로, 서비스를 사용하기 위해 내 모듈의 forRoot 메소드에서 몇 가지 환경 변수를 전달하기를 원할 것입니다. 그러나 어떤 응용 프로그램이 어떤 환경에서 사용하고 있는지에 따라 다릅니다. 그러나 angular-cli로 컴파일 할 때 오류가 발생합니다. 내 environment.ts의 변수를 단지 app.module.ts에 전달합니다.환경 파일을 사용자 정의 각도 2 모듈에 전달

오류 : ERROR in Error : 오류가 발생하여 정적으로 기호 값을 확인하는 중 오류가 발생했습니다. 함수 호출은 지원되지 않습니다. 함수 또는 람다를 내 보낸 함수 (원래 .ts 파일의 19:24 위치)에 대한 참조로 대체하고 /Users/griffin/DCP/customer-dashboard/src/environments/environment.ts의 심볼 환경을 해석하고 /Users/griffin/DCP/customer-dashboard/src/app/app.module.ts에있는 AppModule의 심볼 AppModule을/Users/griffin/DCP/customer-

에 넣으십시오.

맞춤 모듈의 색인은 현재 이와 같이 설정되어 있습니다. :

@NgModule({ 
declarations: [], 
exports: [], 
providers: [ 
AuthService 
], 
imports: [ 
HttpModule, 
BrowserModule 
] 
}) 
export class CommonAuthModule { 
static forRoot(config: AuthServiceConfig): ModuleWithProviders { 
    return { 
    ngModule: CommonAuthModule, 
    providers: [ 
    {provide: AuthServiceConfig, useValue: config } 
    ] 
    }; 
} 

그리고

는 각도 프로젝트에 나는이 같은 수입하고 있습니다 :

import { CommonAuthModule } from '@dcp/common-auth'; 
import { environment } from '../environments/environment'; 

@NgModule({ 
declarations: [ 
    AppComponent 
], 
imports: [ 
    CommonAuthModule.forRoot(environment.authConfig) // Import here 
    ... 
}) 
export class AppModule { } 

environment.authConfig은 단순 객체에게

authConfig: { 
    authenticationUrl: 'https://streamworks.auth0.com/login?client=', 
    clientId: 'f98h3f3fdsousfoihohfjwe0', 
    auth0Domain: 'streamworks.auth0.com' 
} 

되고 AuthServiceConfig 내가 this 후 같은 유사한 문제를 보았다 간단한 클래스

export class AuthServiceConfig { 
    clientId: string = '' 
    auth0Domain: string = ''; 
    authenticationUrl: string = ''; 
} 

입니다. 이것은 AoT 컴파일과 관련이 있습니까? AoT를 우회하여 프로젝트를 구축했지만 여전히 동일한 오류가 발생했습니다.

답변

0

'useValue'을 지정하면 실제로 값을 지정해야하며 주입되지 않은 것이어야합니다.

비슷한 코드가 작동하지만 대신 'useFactory'을 사용합니다. 이렇게하려면 팩토리로 작동하는 모듈 클래스에 정적 메서드를 제공해야합니다 (제공되는 인스턴스의 인스턴스 반환).

상기 코드에서
NgModule({ 
    declarations: [ 
    AppComponent 
    ], 
    imports: [ 
    BrowserModule, 
    AppRoutingModule, 
    etc.... 
    ], 
    providers: [ 
    { provide: COMMON_CONFIG, useFactory: AppModule.commonConfigFactory }, 

    ], 
    bootstrap: [AppComponent] 
}) 
export class AppModule { 
    static commonConfigFactory() { 
    return new CommonConfig(environment); 
    } 
} 

COMMON_CONFIGInjectionToken이고 "CommonConfig" 환경 객체에 대한 래퍼 클래스이다

광산은 다음과 같다.

+1

분명히 올바른 방향입니다. 하지만 forRoot 메소드를 통해 내 라이브러리의 "useValue"값으로 COMMON_CONFIG를 어떻게 제공 할 수 있습니까? – gciluffo