对于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モジュールを利用している場合などで、複数のモジュールでコンポーネントを共有する場合、結局そのコンポーネントをモジュール化する事が必要になる。

建筑结果

スクリーンショット 2018-12-20 12.56.14.png
スクリーンショット 2018-12-20 12.56.24.png

差不多一样。

整合

从模式1到模式2的转变意外地很麻烦。顺便说一下,如果在AppModule中导入自定义模块并且使用了惰性加载,那么在迁移到模式2时必须重新考虑周围的配置。

即使使用模式1,项目开发也可以进行。仅将共享组件模块化也没有问题。然而,在可读性和开发效率等方面,我个人推荐使用模式2进行开发。

广告
将在 10 秒后关闭
bannerAds