1

不久前我已经超过了 2MB 标记,所以我决定实施延迟加载来处理我的大量批次。因此,我对导入、entryComponents 和提供程序有疑问。将它们全部归结为一个问题:

我将什么导入 app-routing.module.ts 以及将什么导入 login-routing.module.ts

因为我使用:

  • 角模块
  • 角度材料模块(垫对话框,因此是入口组件)
  • 许多服务(所有组件中只有一些被调用)
  • 其他 npm

这是我的 app-routing.module.ts:

const routes: Routes = [
  {
    path: '',
    component: AppComponent,
    children: [
      {
        path: '',
        pathMatch: 'full',
        redirectTo: '/login'
      },
      {
        path: '**',
        component: LoginComponent
      },
      {
        path: 'login',
        loadChildren: () => import('./account/login/login.module').then(m => m.LoginModule)
      }
    ]
  }
@NgModule({
  imports: [RouterModule.forRoot(routes, {useHash: true})],
  exports: [RouterModule]
})
export class AppRoutingModule { }

  这是我的登录-routing.module.ts:

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

@NgModule({
  imports: [RouterModule.forChild(routes)],
  exports: [RouterModule]
})
export class LoginRoutingModule { }

4

1 回答 1

1

这是取决于您的用例的事情之一。为了减少包的大小,理想情况下,您将模块树中的所有内容尽可能地向下推。所以你的 App.Module 里面只有很少的东西,你的大部分导入/声明/提供者/入口组件都在你的功能模块中。这将包括除非您需要,否则不要在根目录中注入您的服务,而是将它们设置在功能模块提供程序数组中。

虽然有一些权衡需要考虑。例如,理想情况下,您可以将 Angular 材质模块导入到功能模块中,但如果您将拥有很多功能模块,则必须进入模块并添加导入会有点烦人您在功能模块中需要的每个材料模块。另一方面,对于您的登录模块,您可能只需要几个材料模块,而您的整个应用程序可能需要一堆。

总而言之,如果您的包大小是您的主要关注点,请将所有内容尽可能深入到模块树中。请注意,您在简化开发方面受到了轻微打击。

因此,对于您提到的内容(Angular 模块、Angular Material 模块、服务、其他 NPM),您希望将它们尽可能地推到模块树中。请记住,对于单例服务,您需要将它们放在您的 app.module 中,以便它们仍然是单例服务。如果您将它们移动到功能模块中的 providers 数组中,那么它们都将获得自己的实例。另一个值得注意的例子是 HttpClientModule,您只想在根目录中导入一次。

于 2020-02-03T18:03:02.343 回答