核心模块
您正在寻找的是创建官方 Angular Style Guide推荐的核心模块。
以下是如何重构您的应用程序以满足样式指南,将所有配置保存在一个地方,并创建一个非常有组织和精益的应用程序:
为了减少根文件夹的混乱,创建一个核心模块,我们在应用程序启动时导入一次,从不导入其他任何地方。
脚步:
- 创建
app/core
文件夹
- 将根服务和组件
app/
移至app/core
(例如 IonicModule)
- 创建一个 CoreModule 类来拥有核心材料
例子:
import {
ModuleWithProviders, NgModule,
Optional, SkipSelf } from '@angular/core';
import { CommonModule } from '@angular/common';
import { IonicModule } from 'ionic-angular';
import { ExampleComponent } from './example.component';
import { ExampleService } from './example.service';
@NgModule({
imports: [
CommonModule,
IonicModule.forRoot(MyApp, {
mode: 'ios',
tabsPlacement: 'bottom'
})
],
declarations: [ ExampleComponent ],
exports: [ ExampleComponent ]
})
export class CoreModule {
}
- 请记住:您需要在应用程序范围内使用的任何使用
forRoot()
方法的模块只需要导入一次到CoreModule
. 完成此操作后,它将可用于您应用程序中的每个模块。
2.将提供者添加到CoreModule
(forRoot)
把这个放在CoreModule
课堂上:
static forRoot(): ModuleWithProviders {
return {
ngModule: CoreModule,
providers: [
ExampleService
]
};
}
这是您应该放置应用程序范围的单例提供程序的唯一地方。不要将它们放在SharedModule中。
3.导入CoreModule
到AppModule
像这样添加CoreModule.forRoot()
到您的AppModule
导入中:
imports: [
AppRoutingModule,
BrowserModule,
CoreModule.forRoot()
],
forRoot
仅在根应用程序模块中调用, AppModule
. 在任何其他模块中调用它,特别是在延迟加载的模块中,与意图相反,并且可能会产生运行时错误。
4.防止重新导入(CoreModule
可选,但推荐)
此时一切都应该正常工作,但最好的做法是防止重新导入CoreModule
. 这在与他人合作时特别有用,因为其他开发人员可能不完全了解CoreModule
应该如何使用 a。
将此添加到您CoreModule
的课程中:
constructor(@Optional() @SkipSelf() parentModule: CoreModule) {
throwIfAlreadyLoaded(parentModule, 'CoreModule');
}
进一步的考虑
Lazy-loaded routes
考虑创建延迟加载的路由。这样,您的应用程序的初始加载可以通过仅加载当前路由所需的内容来更快。
SharedModule
考虑创建一个SharedModule
不包括应用程序范围的服务。您可以在此处放置某些路线需要的组件,但不是所有路线。
Why?
这样做的目的是,如果您加载不需要共享服务组件的延迟加载路由,如果这是应用程序首次加载时请求的第一个路由,它将不会下载。这将加快您的初始应用加载时间。当然,如果调用了需要它的路由,则该组件将按预期可用。