2017-07-19 4 views
3

私はIonic 3アプリを作成しています(Angular 4を使用しています)。私は実際のページロジックからロケーションサービスを抽出して再利用できるLocationProviderを作成しました。Angular4で@Injectable()を連鎖させる方法はありますか

My LocationProviderは@ ionic-native/geolocation(ジオロケーションプロバイダ)を使用します。

@NgModule({ providers: [LocationProvider] })経由でロケーションプロバイダーをページに挿入すると、ジオロケーションプロバイダが見つかりませんというエラーが表示されます。 LocationProviderを使用するたびにジオロケーションプロバイダを含める方法はありますか?または、いつもproviders:[LocationProvider, Geolocation]が必要ですか?

私はこれが特定ではありませんが(角度4)、両方のプロバイダをNgModuleに記載する必要があると思いますか?

答えて

1

providersは、単一プロバイダとプロバイダ配列の両方を受け入れます。

それは

export const LOCATION_PROVIDERS = [LocationProvider, Geolocation]; 
... 
providers: [LOCATION_PROVIDERS] 
... 

プロバイダは、独自のモジュールで包み、インポートすることができますすることができます。

+0

「プロバイダはラップすることもできます」と言うと、 '@NgModule({providers:[LocationProvider、Geolocation]})'をエクスポートすることを意味しますか?そして、それを '@NgModule({imports:[LocationProviderModule]})'経由でインポートしますか? Geolocationを10回読み込むことを心配する必要がありますか? – Matt

+0

それは正しいです。遅延ロードされたモジュールを扱っていない限り、心配する必要はありません。すべての通常のモジュールは同じインジェクタを共有します。参考までにhttps://stackoverflow.com/questions/39031284/angular-2-injector-hierarchy-and-ngmoduleをご覧ください。 – estus

+0

それは理にかなっています。子インジェクタがメインインジェクタと異なる値を格納するのを心配する必要がありますか? (ng4のためにこれで多くを見つけることができません、元のng1のものを見つけるように思われます) – Matt

関連する問題