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

Ole*_*our 2 routing lazy-loading angular

在我的主页上,我有 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) }
];
Run Code Online (Sandbox Code Playgroud)

在官方 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)
  },
Run Code Online (Sandbox Code Playgroud)

客户routing.module.ts:

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

  const routes: Routes = [
  {
    path: '',
    component: CustomerListComponent
  }
];
Run Code Online (Sandbox Code Playgroud)

上面的路径设置为空字符串。这是因为 AppRoutingModule 中的路径已经设置为“customers”。

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

Wil*_*der 9

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

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

并调用RouterModule.forRoot(routes)

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

const routes: Routes = [
  { path: 'add', component: AddComponent },
  { path: 'search', component: SearchComponent },
  { path: 'importer', component: ImporterComponent },
  { path: 'publier', component: PublierComponent }
];
Run Code Online (Sandbox Code Playgroud)

并调用RouterModule.forChild(routes)

如果你的URL会/crud/add/crud/search等等。

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

PS 通常认为最好的做法是在构建路线时坚持使用一种语言。Je présume par le nom des routes que tu es francophone :-) généralement on évite de mélanger français et anglais si possible ^^

  • 是的,使用 ng 服务,但我设法修复了它,我的 `base-href` 设置为 `./`,将其更改为 `/` 并且现在可以工作了,非常感谢您的时间 (2认同)