角度:forRoot / forChild方法的用法?

时间:2018-07-24 14:13:53

标签: angular angular-ngmodel

我很惊讶没有确切的答案

forRoot / forChild 的方法是什么?

例如在RouterModule中:

Router.forRoot(routes)

3 个答案:

答案 0 :(得分:3)

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'
  },
  { path: 'company', loadChildren: './company/company.module#CompanyModule'},
  { 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 ]
})

//...

“公司”子级路线也会如此。

答案 1 :(得分:2)

  

forRoot()

     

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

     

forChild()

     

使用所有路由器指令和一个创建一个模块   提供商注册路线。

仅将forRoot / forChild约定用于与将要导入到急切模块模块和惰性模块模块中的提供程序的共享模块

  

Avoiding common confusions with modules in Angular

这是一个很好的答案What is purpose of using forRoot in NgModule?可以提供有关此主题的更多信息

答案 2 :(得分:1)

使用说明

RouterModule可以多次导入:每个延迟加载的包一次。由于路由器处理的是全局共享资源位置,因此我们不能激活多个路由器服务。

这就是为什么有两种方法创建模块的原因:

1。。RouterModule.forRoot-forRoot创建一个模块,其中包含所有指令,给定的路由以及路由器服务本身。

2。。RouterModule.forChild-forChild创建一个模块,其中包含所有指令和给定的路由,但不包括路由器服务。.