Angular2マテリアルの例 を実行していますが、forRoot()
メソッドを使用して、すべてのマテリアルモジュールがルートモジュールにインポートされていることがわかります。私のアプリでも同じことをしています。
次に、他の共有モジュール内でいくつかのマテリアルコンポーネントを使用する必要があります。つまり、共有モジュールに関連するマテリアルパッケージをインポートする必要があります。 SharedモジュールにインポートするときにもforRoot()
メソッドを使用する必要があるかどうかはわかりません。
助けてくれてありがとう
forRoot
は、メインアプリモジュールにのみ使用されます。これは、アプリケーションモジュールのみがアプリケーション/シングルトンプロバイダーを取得するために使用される規則です。これは、シングルトンであるはずのプロバイダーがアプリケーション用に複数回作成されるのを避けるためです。例えば
import { ModuleWithProviders } '@angular/core';
@NgModule({
declarations: [ SomeDirective ],
exports: [ SomeDirective ]
})
export class SharedModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: SharedModule,
providers: [ AuthProvider ]
}
}
}
ここでは、forRoot
をシングルトンとして一度だけ作成できるように、アプリモジュールへのインポート中にAuthProvider
を呼び出す必要があります。 SharedModule
を必要とする他のすべてのモジュールは、ShareModule
を使用できるように、単にSharedDirective
をインポートする必要があります。
したがって、appモジュールでforRoot
を呼び出すと、そのモジュール(および従来はforRoot
の呼び出しに伴うプロバイダー)が提供するすべてのものをappモジュールに取得できます。したがって、アプリモジュールで宣言されたすべてのコンポーネントは、そのモジュールのすべてにアクセスできます。
ただし、declarations
(コンポーネント、ディレクティブ、およびパイプを含む)内のすべては、サブモジュールによって継承されません。したがって、モジュールを必要な他のモジュールにインポートする必要があります。
あなたの質問はあなたのShareModule
に関するものであるようです。このモジュールでは、上記の理由により、forRoot
を使用しないでください。 MDモジュールをexports
するだけです。 imports
で宣言されたコンポーネントが実際にMDモジュールを必要とする場合にのみ、SharedModule
を使用します。たとえば、MDボタンを使用するコンポーネントがあり、そのコンポーネントがSharedModule
で宣言する共有コンポーネントである場合。この場合、imports
とexports
を使用する必要があります。しかし、そのようなコンポーネントがない場合、必要なのはexports
だけです。これにより、SharedModule
をインポートするモジュールにMDモジュールが提供されます。