Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度8延迟加载。有关:导入、入口组件和提供程序的问题_Angular_Lazy Loading_Angular8_Angular2 Providers - Fatal编程技术网

Angular 角度8延迟加载。有关:导入、入口组件和提供程序的问题

Angular 角度8延迟加载。有关:导入、入口组件和提供程序的问题,angular,lazy-loading,angular8,angular2-providers,Angular,Lazy Loading,Angular8,Angular2 Providers,我不久前已经超过了2MB标记,所以我决定实现延迟加载来处理大量的批处理。因此,我对导入、entryComponents和提供者有疑问。将所有问题归纳为一个问题: 我应该将什么导入app-routing.module.ts,以及我应该将什么导入登录routing.module.ts 由于我使用: 角模 角度材质模块(mat对话框,因此是输入组件) 许多服务(在所有组件中只调用一些服务) 其他NPM 此my app-routing.module.ts: const routes: Routes

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

我应该将什么导入app-routing.module.ts,以及我应该将什么导入登录routing.module.ts

由于我使用:

  • 角模
  • 角度材质模块(mat对话框,因此是输入组件)
  • 许多服务(在所有组件中只调用一些服务)
  • 其他NPM

此my 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 { }
const routes: Routes = [
  {
    path: '',
    component: LoginComponent
  }
];

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

这是我的login-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 { }
const routes: Routes = [
  {
    path: '',
    component: LoginComponent
  }
];

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


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

不过,需要考虑一些权衡。例如,理想情况下,对于角材料模块,您可以将其导入到功能模块中,但如果您将拥有许多功能模块,则必须进入模块并为功能模块中所需的每个材料模块添加导入,这有点麻烦。另一方面,对于登录模块,您可能只需要几个材料模块,而整个应用程序可能需要一堆材料模块

总而言之,如果包大小是您主要关心的问题,那么将所有内容尽可能深入到模块树中。只需注意,您的开发难度受到了轻微的影响


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

这是一个完美的答案,正是我想知道的,因为我对提供者以及它们是否会有多个实例存在疑问。