Angular 角度8延迟加载。有关:导入、入口组件和提供程序的问题
我不久前已经超过了2MB标记,所以我决定实现延迟加载来处理大量的批处理。因此,我对导入、entryComponents和提供者有疑问。将所有问题归纳为一个问题: 我应该将什么导入app-routing.module.ts,以及我应该将什么导入登录routing.module.ts 由于我使用: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
- 角模
- 角度材质模块(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,您只想在根目录中导入一次。这是一个完美的答案,正是我想知道的,因为我对提供者以及它们是否会有多个实例存在疑问。