2017-06-28 9 views
1

サービスプロバイダを使用して呼び出す汎用RESTサービスがあるため、URLを渡すことができます。 サービスを複数のプロジェクト(それぞれ異なるREST APIを使用している)や同じプロジェクトの異なるコンポーネント内で再利用できるように、これを実行したいと思います。関数2の場合、角2/4サービスプロバイダはコンパイルされません。

私は私のサービスプロバイダーとして、次のしている:私は今、理論的には個々のコンポーネントまたはapp.moduleレベルでこのサービスプロバイダを使用して、URLを通過することができるはずです

import { Http } from '@angular/http'; 

import { ODataService } from './odata.service'; 

export function ODataServiceProvider(url: string) { 
    return { 
     provide: ODataService, 
     useFactory: (http: any) => { 
      return new ODataService(url, http); 
     }, 
     deps: [Http] 
    } 
} 

providers: [ 
     SafeUrlPipe, 
     ODataServiceProvider("http://services.odata.org/V3/(S(pq1lpmgz0kuok05ubqtx1c2g))/OData/OData.svc/") 
    ], 

これが今エラーを通じて、私はプロジェクトにサービスを提供する時期(またはビルド)::私はそうのようapp.module.tsでそれを行っているエラーで

ERRORは、シンボル値を解決遭遇しました静的に。 関数呼び出しはサポートされていません。 /の/ dev/SVN /製品/ PredictiveAnalytics /トランク/ Glencor eAnalyticsPortal: CにシンボルODataServiceProviderを解決する、機能またはエクスポート機能( 元.TSファイル内の位置8時21分)を基準とした ラムダを交換検討GlencoreAnalyticsPortal.Webclient/src/app/shared/services/odata/odata.serviceProvider.ts、 C:/ dev/SVN/Products/PのAppModuleを解決する redictiveAnalytics/Trunk/GlencoreAnalyticsPortal/GlencoreAnalyticsPortal.Webclient/src/app/app.module.ts、 CにシンボルAppModuleを解決:は/ dev/SVN /製品/ PR edictiveAnalytics /トランク/ GlencoreAnalyticsPortal/GlencoreAnalyticsPortal.Webclient/srcに/アプリ/ app.module.ts

しかし、プロジェクトが提供されて監視されている間にファイルを保存すると、エラーは発生せず、すべてが期待通りに機能します。 この問題を解決する手掛かりはありますか?これは角度の問題ですか?

答えて

0

新しいサービスプロバイダがSUの通りです:ビットはサービスプロバイダをトークン注入を使用して変更することが期待通りに動作し得ることができましたCH:

import { Http } from '@angular/http'; 
import { ODataService } from './odata.service'; 
import { InjectionToken } from '@angular/core'; 

export const URL = new InjectionToken<string>('url'); 

export function ODataServiceProvider(url: string, http: Http) { 
    return new ODataService(url, http); 
} 

これは今に注入することができるURLと呼ばれる単純な文字列を持っており、プロバイダは今それが必要とする2依存関係/パラメータがあります。次のように 我々は、これらの両方の中に注入し、これは、(不要なコードが省略された)任意のコンポーネントで行うことができる:URLは現在のプロバイダとして割り当てられ、次いでDEPSで使用さ

import { ODataServiceProvider, URL } from './shared/services/odata/odata.serviceProvider'; 
import { Http } from '@angular/http'; 
import { ODataService } from './shared/services/odata/odata.service'; 


providers: [ 
    { 
     provide: URL, 
     useValue: 'http://services.odata.org/V3/(S(pq1lpmgz0kuok05ubqtx1c2g))/OData/OData.svc/' 
    }, 
    { 
     provide: ODataService, 
     useFactory: ODataServiceProvider, 
     deps: [URL, Http] 
    } 
    ] 

音符、可能にしますそれをサービスプロバイダに注入する必要があります。

これが最善の方法であるかどうかはわかりませんが、うまくいくようです。 https://angular.io/guide/dependency-injection#injection-token

0

なぜ起こるのか分かりませんが、同様の問題があり、以下のように解決されました。

エクスポートしますngmodule外にあなたのサービスのビルドを返した後、{:, useFactoryを提供:}を使用してプロバイダ内で呼び出す機能それはこのようなものでなければならない

export function myDataService() { 
    return ODataServiceProvider("http://services.odata.org/V3/(S(pq1lpmgz0kuok05ubqtx1c2g))/OData/OData.svc/"); 
} 
@NgModule({ 
    ... 
    providers: [ 
     SafeUrlPipe, 
     { 
     provide: MyProvider, 
     useFactory: myDataService 
     } 
    ] 
}) 

...

+0

は、今コンパイルしますが、その実際を提供するように思える:さらに、サービスプロバイダは、このような角度のAPIのように設定のセットを必要とする場合は、実際にはURL文字列はインタフェースでも持っている可能性があり、この上に構築するには

今機能する。 –

+0

私は以前のように実際のサービスにアクセスすることはできません。 –

関連する問題