質問に対する正確な回答がないことに驚きました:
メソッドforRoot/forChildのために作られたものは何ですか?
たとえば、RouterModuleの場合:
Router.forRoot(routes)
すべてのルータープロバイダーとディレクティブを含むモジュールを作成します。また、オプションで、初期ナビゲーションを実行するようにアプリケーションリスナーを設定します。
While RouterModule#forChild
すべてのルーターディレクティブとルートを登録するプロバイダーを含むモジュールを作成します。
通常、1つ目はAngularアプリの初期構成を作成して「基本」ルートを登録するために使用され、2つ目は通常「相対」ルートを構成するために使用されます。
次のルートを持つアプリがあるとします。
次のような前述のメソッドを使用できます。
app-routing.module.ts (これは「実際の」アプリであり、ルートは異なります)
ベースルートuser/
およびcompany/
は、RouterModule#forRoot
を使用して登録されます。
//...
const routes: Routes = [
{
path: 'user', loadChildren: './user/user.module#userModule'
// this lazy loading is deprecated in favor of
// loadChildren: () => import('./user/user.module').then(m => m.UserModule) }
},
// same deprecation applies here
{ path: 'company', loadChildren: './company/company.module#CompanyModule'},
// same deprecation applies here
{ path: '**', loadChildren: './page-not-found/page-not-found.module#PageNotFoundModule'}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
//...
user-routing.module.ts (これは「実際の」アプリであり、ルートは異なります)
また、user/
およびcompany/
への相対ルートは、RouterModule#forChild
を使用して登録されます。
//...
const routes: Routes = [
{ path: 'list', component: UserComponent},
{ path: 'delete/:id', component: UserDeleteComponent},
{ path: 'register/:id', component: UserRegisterComponent},
];
@NgModule({
imports: [ RouterModule.forChild(routes) ],
exports: [ RouterModule ]
})
//...
そして、同じことが会社の子供たちのルートにも当てはまります。
すべてのルータープロバイダーとディレクティブを含むモジュールを作成します。また、オプションで、初期ナビゲーションを実行するようにアプリケーションリスナーを設定します。
すべてのルーターディレクティブとルートを登録するプロバイダーを含むモジュールを作成します。
イーガーモジュールとレイジーモジュールモジュールの両方にインポートされるプロバイダーを含む共有モジュールに対してのみ、forRoot/forChild規則を使用します
これは素晴らしい答えです NgModuleでforRootを使用する目的は何ですか? このトピックに関する追加情報を提供できます
使用上の注意
RouterModuleは複数回インポートできます。遅延ロードされたバンドルごとに1回です。ルーターはグローバルな共有リソース(場所)を扱うため、複数のルーターサービスをアクティブにすることはできません。
そのため、モジュールを作成するには2つの方法があります。
1。 RouterModule.forRoot-forRootは、すべてのディレクティブ、指定されたルート、およびルーターサービス自体を含むモジュールを作成します。
2。 RouterModule.forChild-forChildは、すべてのディレクティブと指定されたルートを含むモジュールを作成しますが、ルーターサービスは含みません。