1

我一直在阅读 Angular 2 项目的种子模板,并且有一个关于何时在较大模块中包含模块与组件的问题。我知道建议为每个功能创建模块,但很难决定如何构建。

我有一个项目,其中有一个公共和管理部分(管理员被包裹在警卫中)。每个部分都有一些不同的功能,但它们共享相同的基础模型(获取项目、创建项目等)。我的问题是,在知道某些组件需要保护的情况下,构建它的最佳方法是什么?我是否有一个 AppModule,其下方有一个 Public 和 AdminModule(受保护)(具有引用共享模块中的模型的组件)以及每个功能的模块?还是我有一个 AppModule,下面有所有功能模块并直接保护每个组件?我想这个问题被问了很多,或者我问错了地方,所以任何关于在哪里/做什么的方向都会受到赞赏。

AppModule 供参考

import { NgModule, Inject } from '@angular/core';
import { RouterModule } from '@angular/router';
import { CommonModule, APP_BASE_HREF } from '@angular/common';
import { HttpModule, Http } from '@angular/http';
import { FormsModule } from '@angular/forms';
import { Ng2BootstrapModule } from 'ngx-bootstrap';
import { NavMenuComponent } from './navmenu/navmenu.component';
import { NotFoundComponent } from './not-found/not-found.component';
import { LinkService } from '../shared/link.service';
import { AuthenticationService } from './authentication.service';
import { ORIGIN_URL } from '../shared/constants/baseurl.constants';
import { TransferHttpModule } from '../../modules/transfer-http/transfer-http.module';

@NgModule({
declarations: [
    NavMenuComponent,
    NotFoundComponent
],
imports: [
    CommonModule,
    HttpModule,
    FormsModule,
    RouterModule,
    Ng2BootstrapModule.forRoot(),
    TransferHttpModule,
],
providers: [
    LinkService,
    AuthenticationService,
],
exports: [
    CommonModule,
    HttpModule,
    FormsModule,
    Ng2BootstrapModule,
    TransferHttpModule,
    RouterModule
]
})
export class CoreModule {
}
4

1 回答 1

0

初步答案

听起来你需要:

  • 一个服务模块——通常命名为CoreModule——具有将被整个应用程序使用的服务(提供者)。例如:自定义AuthenticationServiceHttpService. 我还将从此处导出应具有应用程序范围的 Angular 本机服务(例如:RouterModule、、FormsModule)。您的 mainAppModule将是唯一要导入的CoreModule

  • 具有(并导出)应用程序的许多组件共享的组件、指令和管道的小部件模块:SharedModule这可能是一个好名字。

  • 一个非常薄AppModule的,基本上只有一个AppComponent带有路由器插座(如果您的应用程序有路由)和一个裸模板。应用程序的核心将显示在<router-outlet>接下来的 2 个模块中并由其控制

  • ACustomerModule包含专门为最终用户提供应用程序所需的组件、指令和管道(如果您有一个大型应用程序,这可能是几个模块)。该模块将导入SharedModule. 您将需要相应CustomerRoutingModule的与路由器路径到组件的说明

  • 具有AdminModule专门为管理界面提供服务所需的组件、指令和管道。您将需要相应AdminRoutingModule的及其带有路由器说明的 Guards

基本上,您需要保护的组件应该只属于 Admin 模块。查看文档中的此链接以获取灵感

附录

Ng2BootstrapModule由于未正确导入到引发错误的模块中,因此会发生有关标签不存在的错误。导入Ng2BootstrapModule(或.forChild()如果存在)SharedModule并导入SharedModule所有其他模块。或者,如果您没有 a SharedModule,只需将Ng2BootsrapModule(或 a.forChild()如果存在)导入您的每个其他模块(除了CoreModule已经有Ng2BootsrapModule.forRoot()

请记住,CoreModule应该只导入到您的根目录中AppModule;不进入其他模块。

于 2017-06-21T03:48:33.760 回答