- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我一直在使用在线教程并创建了一个“还行”的 SPA 数据输入应用程序。
我可以很好地连接到我的 WEB API,但只构建了一个模型,我的 AppModule 已经有几行了。
我正在考虑并使用当前的方法,我认为 AppModule 将在我完成后变得非常大,难以阅读,甚至可能更难调试。
我是否可能错过了如何构建 Angular2 大型应用程序的要点?
我正在努力寻找大于 1 个组件的在线教程/项目以供引用。
下面是我的 app.module.ts
和文件夹结构。
我将我的 CashMovement
、ListComponent
和 DataService
分开,我认为这是很好的做法,但添加了另外 10 种不同的数据服务和列表,并且app.module 会很长。
在我继续之前,请任何人阅读一些他们可以指向我的内容或建议,我理解这些建议是主观的个人意见。
import './rxjs-operators';
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { PaginationModule, DatepickerModule, Ng2BootstrapModule, ModalModule, ProgressbarModule, TimepickerModule } from 'ng2-bootstrap/ng2-bootstrap';
import { SlimLoadingBarService, SlimLoadingBarComponent } from 'ng2-slim-loading-bar';
import { AppComponent } from './app.component';
import { DateFormatPipe } from './shared/pipes/date-format.pipe';
import { HighlightDirective } from './shared/directives/highlight.directive';
import { HomeComponent } from './home/home.component';
import { MobileHideDirective } from './shared/directives/mobile-hide.directive';
import { CashMovementListComponent } from './cashmovements/cashmovement-list.component';
import { CashMovementDataService } from './cashmovements/cashmovement.data.service';
import { routing } from './app.routes';
import { ConfigService } from './shared/utils/config.service';
import { ItemsService } from './shared/utils/items.service';
import { MappingService } from './shared/utils/mapping.service';
import { NotificationService } from './shared/utils/notification.service';
@NgModule({
imports: [
BrowserModule,
DatepickerModule,
FormsModule,
HttpModule,
Ng2BootstrapModule,
ModalModule,
ProgressbarModule,
PaginationModule,
routing,
TimepickerModule
],
declarations: [
AppComponent,
DateFormatPipe,
HighlightDirective,
HomeComponent,
MobileHideDirective,
SlimLoadingBarComponent,
CashMovementListComponent
],
providers: [
ConfigService,
CashMovementDataService,
ItemsService,
MappingService,
NotificationService,
SlimLoadingBarService
],
bootstrap: [AppComponent]
})
export class AppModule { }
最佳答案
您需要学习使用模块。
我通常将模块分解为这些类型
布局模块 用于对应用进行布局。例如顶栏模块、侧边菜单模块、页脚模块和主要内容模块。
功能模块。这到底是什么?确实没有明确的定义,但是您认为模块中可以自包含的任何功能区域,您也可以这样做。您会将这些功能模块导入到您的布局模块中,因为这些功能构成了不同的布局组件
核心模块。您将在这里导出您的布局模块和所有核心(单例)服务。您只需导出(而不是导入)模块,因为核心模块中没有任何内容会实际使用这些布局模块。您只需导出它们,以便应用程序模块可以使用它们。核心模块只会导入到app模块
共享模块。您将在此处声明所有共享管道、指令和组件。您还可以导出常用模块,如 CommonModule
和 FormsModule
。其他模块将使用该模块
应用模块。你已经知道这是什么了。在您自己创建的模块中,您唯一需要导入的是共享模块和核心模块。
这是一个基本的布局
共享模块
@NgModule({
declarations: [ HighlightDirective, SharedPipe, SharedComponent ],
exports: [
HighlightDirective, SharedPipe, SharedComponent,
CommonModule, FormsModule
]
})
class SharedModule {}
布局模块 注意其他模块将使用 SharedModule
@NgModule({
imports: [ FeatureAModule, FeatureBModule, SharedModule ]
declarations: [ TopbarComponent ],
exports: [ TopbarComponent ]
})
class TopbarModule {}
@NgModule({
imports: [ SharedModule ]
declarations: [ SidemenuComponent ],
exports: [ SidemenuComponent ]
})
class SidemenuModule {
static forRoot() { // pattern for adding app-wide services
return {
ngModule: SidemenuModule,
providers: [ MenuSelectionService ]
}
}
}
@NgModule({
imports: [ HomeModule, OtherModule, SharedModuel ]
declarations: [ MainContentComponent ],
exports: [ MainContentComponent ]
})
class MainContentModule {}
CoreModule 将构成应用程序的所有布局模块集中在一起。并添加其他应用范围内的服务,这些服务与其他模块无关
@NgModule({
imports: [ SidemeuModule.forRoot() ]
exports: [ TopbarModule, SidemenuModule, MainContentModule ],
})
class CoreModule {
static forRoot() {
return {
ngModule: CoreModule,
providers: [ UserService, AuthService ]
}
}
}
应用模块
@NgModule({
imports: [
BrowserModule,
SharedModule,
CoreModule.forRoot(), // forRoot so we get all the providers
HttpModule,
RouterModule.forRoot(APP_ROUTES)
],
declarations: [ AppComponent ],
bootstrap: [ AppComponent ]
})
class AppModule {}
另请参阅:
关于Angular2 如何清理 AppModule,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39906949/
我仅在 Kitkat 设备上遇到此崩溃。我的 logcat 在下面。在 getViewModel 处崩溃 Fatal Exception: java.lang.NoClassDefFoundError
我对 Angular 和 .net Core 还很陌生。我正在编写代码来执行 CRUD 操作。我的一个获取项目组件中有以下代码。 import { Component } from '@angular
我对 Angular 和 .net Core 还很陌生。我正在编写代码来执行 CRUD 操作。我的一个获取项目组件中有以下代码。 import { Component } from '@angular
我已经实现了一个拦截器来添加我可以制作 seucred api 的授权 header 。当我在任何应用程序模块中注入(inject)此服务时出现错误//"无法实例化循环依赖!HttpClient ("
I have added this code into my app.module.ts providers: [ AppConfigService, {
我已经创建了一个类似于 Angular 文档中的突出显示指令,但是我无法在 appmodule 中导入的其他模块中使用它。以下是我的 appmodule.ts 文件: import { Browser
我正在阅读有关模块的 Angular 文档,寻找不鼓励在 AppModule 中导入 SharedModule 的行。 我没有找到任何关于此的内容,只是一个 GitHub 问题,指出最好不要导入它。然
我正在尝试将 AngularDart 应用程序放在一起,并且我会在文档中来回切换。 在 AngularDart 官方网站架构页面中,它谈到了最重要的 AppModule AngularDart Arc
我正在开发 Angular 6 项目。自最近几天以来,我陷入了以下问题。请指导。 我的程序基于惰性路由并且也有动态路由。以下代码是我的app-routing.module.ts: const rou
我一直在使用在线教程并创建了一个“还行”的 SPA 数据输入应用程序。 我可以很好地连接到我的 WEB API,但只构建了一个模型,我的 AppModule 已经有几行了。 我正在考虑并使用当前的方法
Angular 2+ 通过以下方式注册提供者: // @NgModule decorator with its metadata @NgModule({ declarations: [...],
我不明白为什么当我有了新的提供商时,我一次又一次地遇到这个错误。当我有任何其他提供商(如地理定位等)时,我遇到此错误: Error: Uncaught Error: Invalid provider
我才刚刚开始学习如何使用 Angular 2 和 Ionic 3.20.0,但现在面临挑战。我正尝试在我的主页中显示产品图片,但该应用程序抛出此错误 ERROR Error: Uncaught (in
如何从延迟加载的模块访问 AppModule 导入? 我的 Angular 10 应用导入 AngularMaterial 和 NXTranslate 模块 进入 AppModule。 NxTrans
在我的应用程序(独立)中,当我需要从 Guice 获取一些对象实例时,我通常这样做: injector = Guice.createInjector(new AppModule()); instanc
我是 Angular 的新手,我试图在具有以下目录结构的 Angular2 应用程序中分离我的模块。 我在 AppModule 中声明了我的模块和其他组件,但是我在浏览器控制台中收到一个错误 Unex
我最近更新了 2.4.1 版本。 "@angular/common": "~2.4.1", "@angular/compiler": "~2.4.1", "@angular/compiler-cli"
我正在尝试在我的 Angular 6 应用程序中实现延迟加载,我所有的 http 调用都是在 FeatureModule(延迟加载)中进行的,但我仍然必须添加 HttpClientModule 在我的
我已经搜索了很多有关此错误的信息,但没有任何有用的信息,这种错误通常有角度地告诉您缺少提供程序的对象是什么,但是这次它给出了 StaticInjectorError(AppModule)[[objec
我有以下代码 @NgModule({ declarations: [ ... ], imports: [ RoutingModule, SharedModule,
我是一名优秀的程序员,十分优秀!