サービスをモジュールで提供することは、サービスがインスタンス化され、モジュールの一部であるすべてのコンポーネント、ディレクティブ、およびパイプで使用可能になることを意味します。サービスはシングルトンなので、モジュールはそれらを使用するすべてのコンポーネント、ディレクティブ、またはパイプのサービスを追跡する必要があります。個々のコンポーネントでサービスを提供することもできますが、それは各コンポーネントのサービスをそれぞれインスタンス化し、最初にシングルトンサービスを使用する理由を事実上無効にします。これをモジュールレベルで提供することで、この問題が解決されます。
モジュールの外でサービスを利用可能にしたい場合は、何もする必要はありません。プロジェクトにインポートされたモジュール内でサービスを提供することは、プロジェクト内のどこでも利用可能であることを意味します。
関連:Why is a service provided in a feature module available everywhere?
あなたはモジュールの外部コンポーネント、ディレクティブ、またはパイプが利用できるようにしたい場合は、あなたがエクスポートする必要が彼ら(とあなたがそれらを使用したいモジュールにインポート) 。これは、モジュール内のexportキーワードを使用して行うことができます。
関連:
@NgModule({
declarations: [COMMON_DIRECTIVES, COMMON_PIPES],
exports: [COMMON_DIRECTIVES, COMMON_PIPES],
providers: [
{provide: NgLocalization, useClass: NgLocaleLocalization},
],
})
楽しい事実:それは私たちはその後、私たち自身のモジュールにインポートCommonModule(docs)、からエクスポートしているためWhat classes should I export?
たとえば、あなたがNgIfディレクティブを使用できる場合1つのモジュール(ブートストラップされたルートモジュール)しかない場合、実際にはCommonModuleではなくBrowserModuleを使用します。 CommonModuleのすべての機能がBrowserModuleにある理由は、BrowserModuleがインポートしてCommonModule全体を再エクスポートするためです。
さらに詳しい情報が必要な場合は、angular2のウェブサイトのmodule systemに関する詳細なガイドがあります。以前にリンクしたFAQページも非常に便利です。