情景: 我重写了4个较旧的独立SPA应用程序,它代表了使用Angular 5的典型业务流程中的4个步骤。通常,每个应用程序都应由不同的actor(具有特定角色的用户)使用,但用户可以拥有多个角色
虽然从用户的角度看这些应用程序是独立的,但它们共享许多常见的逻辑,例如:后端服务,授权,枚举,常量甚至一些共享的UI组件。
在新的Angular版本中,我打算为所有应用程序提供通用框架,初始化,身份验证和欢迎页面以及指向4个子应用程序的链接。
技术细节是,访问其中一个应用的用户不需要为其他应用下载代码。但是,在某些应用程序中也需要某种延迟加载。
我决定制作单个git存储库和一个角度项目。
问题:我应该将应用分成Angular模块吗?怎么样?为什么以及后果是什么?
我最初的想法是使用欢迎页面创建默认的AppModule。然后为每个应用程序提供4个模块,然后为共享逻辑提供CommonModule。但是,由于我是棱角分明的新人,所以它更多地基于我的感受而不是专业知识:)
答案 0 :(得分:2)
我的建议是每个路由有一个模块(例如/ step-1 => Module1,/ step-2 => Module2,...)和公共模块。这样做可以延迟加载它们,避免加载页面缓慢等问题(Angular lazy loading docs)。关于拥有一个通用模块的想法是正确的,这样你可以将它注入需要它的不同模块。
更新:路线结构
<强> app.routing.module.ts 强>
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
const routes = [
{
path: 'admin',
loadChildren: 'app/admin/admin.module#AdminModule'
},
{
path: 'players',
loadChildren: 'app/players/players.module#PlayersModule'
},
{
path: 'teams',
loadChildren: 'app/teams/teams.module#TeamsModule'
}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
<强> players.routing.module 强>
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { PlayersComponent } from './players.component';
import { PlayersResolver } from './players.resolver';
const routes = [
{ path: '',
component: PlayersComponent,
resolve: {
standings: PlayersResolver
}
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule],
providers: [PlayersResolver]
})
export class PlayersRoutingModule { }
<强> players.module.ts 强>
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { PlayersComponent } from './players.component';
import { PlayersRoutingModule } from './players.routing.module';
import { PlayersService } from './players.service';
@NgModule({
imports: [
CommonModule,
PlayersRoutingModule
],
declarations: [PlayersComponent],
providers: [PlayersService]
})
export class PlayersModule { }