2017-09-27 9 views
1

現在、私は、ホスト環境に依存するカスタム角度ライブラリを作成中です。理想的には、私のモジュールのforRootメソッドでいくつかのアプリケーションが使用しているサービスとそれらがどの環境にあるかによってサービスを使用するためのカップル環境変数を渡したいと思います。しかし、angular-cliでコンパイルするとエラーが発生します。私のenvironment.tsから変数を渡すだけでapp.module.tsになります。環境ファイルをカスタムAngular 2モジュールに渡す

エラーのエラー:シンボル値を静的に解決する際にエラーが発生しました。関数呼び出しはサポートされていません。ファンクションまたはラムダを、エクスポートされた関数(元の.tsファイルの19:24の位置)への参照で置き換え、/Users/griffin/DCP/customer-dashboard/src/environments/environment.tsのシンボル環境を解決し、/Users/griffin/DCP/customer-

のAppModuleを解決する/Users/griffin/DCP/customer-dashboard/src/app/app.module.tsのシンボルAppModuleカスタムモジュールのインデックスは現在このように設定されています:

@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

確かに正しいトラックに。しかし、私はどのようにCOMMON_CONFIG forRootメソッドを介して私のライブラリの "useValue"の値として提供することができますか? – gciluffo

関連する問題