对于Angular项目的文件结构的研究
从结论来看
这篇文章是关于在Angular项目开发中,尽量将组件模块化并使用import的方式进行项目开发,这样会让我们在各个方面更加幸福的故事。
请比较一下
在Angular开发中,可以分为两种主要的开发方法。
– 选项1: 在根模块(类似于Lazy Loading时指定的loadChildren位置)下声明并使用所有组件(包括子组件和孙子组件等)。
– 选项2: 将每个组件模块化,并通过导入到直接父组件的模块中使用。
请以中文进行本地化的改写,只需要一个选项:
模式1
root
├── root.component.html
├── root.component.scss
├── root.component.ts
└── root.module.ts
child
├── child.component.html
├── child.component.scss
└── child.component.ts
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RootComponent } from './root.component';
import { ChildComponent } from '../child/child.component';
@NgModule({
imports: [
CommonModule,
],
declarations: [
RootComponent,
ChildComponent,
],
})
export class RootModule { }
模式2
root
├── root.component.html
├── root.component.scss
├── root.component.ts
└── root.module.ts
child
├── child.component.html
├── child.component.scss
├── child.component.ts
└── child.module.ts
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RootComponent } from './root.component';
import { ChildModule } from '../child/child.module';
@NgModule({
imports: [
CommonModule,
ChildModule
],
declarations: [
RootComponent,
],
})
export class RootModule { }
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { ChildComponent } from './child.component';
@NgModule({
imports: [
CommonModule,
],
declarations: [
ChildComponent,
],
exports: [
ChildComponent
]
})
export class RootModule { }
我用单一代码库的方式开发了一个项目,参考了上述两种模式,得到了完全相同的结果。
為了開發需要適度的原始碼,我們將Angular Material中提供的範例集合在一起。
认为选择方案2更好的理由。
~example-one/src/app/roots/categories.module.ts
~example-two/src/app/roots/categories.module.ts
根据对上述两个文件进行比较,可以一目了然地看出,在模式1中
-
- categories.module.tsに全てのコンポーネントをdeclareしているため、そもそも読みづらくなります
-
- コンポーネントを削除したい、一部を編集したいとなった場合に不要となるモジュール(今回の場合 Angular Material等)を把握できないので、不使用でimportしてしまうという状況に陥る蓋然性が高くなる。
- lazy loadingを使用し複数のrootモジュールを利用している場合などで、複数のモジュールでコンポーネントを共有する場合、結局そのコンポーネントをモジュール化する事が必要になる。
建筑结果
差不多一样。
整合
从模式1到模式2的转变意外地很麻烦。顺便说一下,如果在AppModule中导入自定义模块并且使用了惰性加载,那么在迁移到模式2时必须重新考虑周围的配置。
即使使用模式1,项目开发也可以进行。仅将共享组件模块化也没有问题。然而,在可读性和开发效率等方面,我个人推荐使用模式2进行开发。