Angular:forRoot/forChild方法用法?

Ste*_*rov 9 angular-ngmodel angular angular-router

我很惊讶没有确切的答案:

Root/forChild的方法是什么?

例如在RouterModule中:

Router.forRoot(routes)
Run Code Online (Sandbox Code Playgroud)

lea*_*iro 7

RouterModule#forRoot

用所有路由器提供程序和指令创建一个模块。它还可以选择设置应用程序侦听器以执行初始导航。

RouterModule#forChild

创建具有所有路由器指令和提供者注册路由的模块。

第一个通常用于为Angular应用创建初始配置并注册“基本”路由,而第二个通常用于配置“相对”路由。

假设我们有一个包含以下路线的应用程序:

  1. 用户
    • 寄存器
    • 清单
    • 删除
  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 { }
//...
Run Code Online (Sandbox Code Playgroud)

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 ]
})

//...
Run Code Online (Sandbox Code Playgroud)

对于公司的子公司路线也是如此。


mal*_*awi 3

forRoot()

创建一个包含所有路由器提供程序和指令的模块。它还可以选择设置应用程序侦听器来执行初始导航。

forChild()

创建一个包含所有路由器指令的模块和一个注册路由的提供程序。

仅将 forRoot/forChild 约定用于具有要导入到 eager 模块和惰性模块中的提供者的共享模块

避免 Angular 中模块的常见混淆

这是一个很好的答案在 NgModule 中使用 forRoot 的目的是什么?可以提供有关该主题的额外信息