Angular,如何在延迟加载的模块中包含多个组件?

时间:2019-08-07 11:59:16

标签: angular routing lazyload

在我的主页上,我有4个指向所有组件的链接,这些组件均属于名为“ CrudModule”的功能模块。

我想知道如何延迟加载该模块,这似乎不起作用:

我的app-routing.module.ts:

const routes: Routes = [
   { path: 'add', loadChildren: () => import(`./crudFeatureModule/crud.module`).then(x => x.CrudModule) }
  , { path: 'search', loadChildren: () => import(`./crudFeatureModule/crud.module`).then(x => x.CrudModule) }
  , { path: 'importer', loadChildren: () => import(`./crudFeatureModule/crud.module`).then(x => x.CrudModule) }
  , { path: 'publier', loadChildren: () => import(`./crudFeatureModule/crud.module`).then(x => x.CrudModule) }
];

在正式的Angular文档中,每个模块仅提及一个组件,请参见
来自https://angular.io/guide/lazy-loading-ngmodules的示例:

app-routing.module.ts:

const routes: Routes = [
  {
    path: 'customers',
    loadChildren: () => import('./customers/customers.module').then(mod => mod.CustomersModule)
  },

customers-routing.module.ts:

  import { CustomerListComponent } from './customer-list/customer-list.component';

  const routes: Routes = [
  {
    path: '',
    component: CustomerListComponent
  }
];

以上路径设置为空字符串。这是因为AppRoutingModule中的路径已设置为“客户”。

问题:鉴于延迟加载模块的路径始终需要为空,这是否意味着我应该将所有组件放在不同的模块中以实现延迟加载?换句话说,延迟加载的模块可以处理多个路由吗? 如果是这样,我应该怎么做?

2 个答案:

答案 0 :(得分:2)

通常,您的主路由器模块中的路由如下所示:

const routes: Routes = [
  {
    path: 'crud',
    loadChildren: () => import('./crudFeatureModule/crud.module').then(mod => mod.CrudModule)
  }
];

并致电RouterModule.forRoot(routes)

然后,在您的CrudModule中,您将:

const routes: Routes = [
  { path: 'add', component: AddComponent },
  { path: 'search', component: SearchComponent },
  { path: 'importer', component: ImporterComponent },
  { path: 'publier', component: PublierComponent }
];

并致电RouterModule.forChild(routes)

您的网址将是/crud/add/crud/search等。

在使用loadChildren时,您延迟加载的模块需要知道如何加载子路由,即它需要将其路由注册到RouterModule。明白我的意思吗?

P.S。在构建路线时,通常被认为是坚持一种语言的最佳实践。法语法语授课的路线:-)法语和法语上的法语翻译可能^^

答案 1 :(得分:0)

如果要加载单独页面中的每个组件,则必须为其所依赖的每个组件创建模块。

我实现了我的应用程序的路由,例如打击和这种工作

  { path: 'person', loadChildren: './projects/person/person.module#PersonModule' },