【问题标题】:One single NgModule versus multiples ones with Angular 2一个 NgModule 与 Angular 2 的多个 NgModule
【发布时间】:2016-09-28 19:34:10
【问题描述】:

我想知道是否最好创建一个包含我所有 angular 2 代码的单个模块,或者是否最好将所有内容拆分到多个模块中。例如,我正在使用 Angular 2 创建我的博客。所以我有一个“文章列表”组件和一个“文章”组件。 “article-list”调用一个服务,该服务返回一个文章列表,然后对其执行“ngFor”并为每一篇插入一个“文章”。

“article”组件包含一个“tag-list”组件(遵循与“article-list”相同的模式,所以我也有一个“tag”组件)。目前,一切都在一个模块中并且运行良好,但是here,我可以看到他们为“英雄”相关的东西创建了一个模块,但我只是想知道它是否真的有必要。

实际上,我并不完全知道创建模块而不是将所有内容都放在主模块中的成本,所以我很难知道我应该继续使用一个模块还是创建一个“文章”模块和一个“标签”之一。

【问题讨论】:

    标签: angular ng-modules


    【解决方案1】:

    是的,您可以将应用程序拆分为模块。这将减少应用程序中模块之间的耦合。如果您正在构建一个大型应用程序,则将应用程序划分为功能单元或模块非常重要。

    例如,您的主模块名称是“app.module”

    应用程序由“页眉”、“首页”、...、“页脚”部分组成。

    在 Header 部分中,您可以创建多个组件。例如。链接(路由)和搜索部分,将其添加到模块标题中。同样 Home、Footer 和其他部分包含相关的模块。

    例如,Home 部分是一个包含许多功能的大型部分,那么我们可以创建多个模块并注入到 home 主模块中,例如“home.module”。

    以下代码只是一个示例,展示了如何在 Angular 2 中实现多个模块。

    app.module.ts

    import { NgModule }      from '@angular/core';
    import { BrowserModule } from '@angular/platform-browser';
    
    
    import { AppComponent }   from './app.component';
    import { HeaderModule }   from './header.module';
    
    @NgModule({
      imports:      [ 
        BrowserModule,
        HeaderModule
      ],
      declarations: [
        AppComponent,
      ],
      bootstrap: [ AppComponent ]
    })
    
    export class AppModule { }
    

    header.module.ts

    import { NgModule }      from '@angular/core';
    import { CommonModule }  from '@angular/common';
    import { FormsModule }   from '@angular/forms';
    import { HttpModule } from '@angular/http';
    
    import {
      InputTextModule, 
      ButtonModule,
      DataTableModule,
      SharedModule
    } from 'primeng/primeng';
    
    import { HeaderComponent }   from './header.component';
    import { UploadFileComponent }   from './upload-file.component';
    
    
    @NgModule({
      imports:      [
        CommonModule,
        FormsModule,
        HttpModule,
        InputTextModule,
        ButtonModule,
        DataTableModule,
        SharedModule
      ],
      declarations: [
        HeaderComponent,
        UploadFileComponent
      ],
      exports: [ 
        HeaderComponent 
      ]
    })
    
    export class HeaderModule { }
    

    Just refer angular2 ngmodule documentation

    【讨论】:

    • 其他模块推荐放在哪里?在 app.module.ts 附近,是否靠近与其相关的功能?谢谢。
    • @Guy 我们需要以模块化结构构建应用程序。所以依赖的模块被注入到相应的功能主模块中。例如,如果您有一个大功能,那么您可以在功能文件夹中创建一个“main.module.ts”,并在“main.module.ts”中注入其他依赖模块
    • 这种方法的问题是Module A 可以调用Module BModule B 不能调用Module A。在这种情况下,您必须使用一个模块来放置所有服务并创建一些共享组件。
    • @Portekoi 你是对的。我们需要根据您的项目结构创建诸如核心、共享等模块之类的东西。在这里,我只是解释了单个模块与多个模块。
    【解决方案2】:

    您应该努力根据您的功能将您的应用程序拆分为模块。

    • Angular 模块可以更轻松地隔离、测试和重用功能。
    • Angular 模块可以轻松地延迟加载可路由的功能。

    如果我们坚持使用 Angular 教程示例: 将所有英雄归入 HeroesModule 下,将恶棍归入 VillainsModule 下是有意义的。其次,如果您有与它们和应用程序中的其他模块相关的通用功能,您可以创建另一个模块,例如通用模块。

    例如,Angular 2 本身附带了 Common 模块,该模块提供了 NgFor 和 NgIf 指令等基本功能。

    【讨论】:

    • 并且创建一个包含“HeaderComponent”、“HomeComponent”、“FooterComponent”等组件的“StructureModule”是否也有意义(基本上,构成网站的不同页面)?
    • 我宁愿把这些组件放在“Common”模块下
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    • 2017-06-15
    相关资源
    最近更新 更多