我试图找到一种构建 Angular 2 应用程序的好方法。Angular 2 风格指南推荐创建一个核心模块。如果我理解正确,核心模块的目标是收集一次性类和组件并保持根模块纤细。还有写的是我应该将资产所需的所有模块导入核心模块。
对于需要包含在方法 forRoot() 中的第三方库(如 NgBootstrap 或 angular2-notifications),我有点困惑。通常只应在根模块中调用 forRoot() 方法。我应该在根模块还是核心模块中包含这些模块?
在下面的示例中,我需要对 angular2-notifications 进行一些配置。为了让我的根模块保持苗条,我在核心模块中导入了 SimpleNotifications。
- 这是正确的方法吗?为了使应用程序工作,我仍然需要在应用程序模块中导入 SimpleNotificationsModule.forRoot()。
- 为什么我需要在核心模块中再次导入 SimpleNotificationsModule。它不应该由应用程序模块提供。我认为感谢 forRoot() 他们的核心模块使用与应用程序模块相同的导入模块?
- 如果是,我应该在核心模块中导入 SimpleNotifications 吗?我真的应该在那里调用 forRoot() 方法吗?
应用模块
...
import {SimpleNotificationsModule} from 'angular2-notifications';
@NgModule({
declarations: [...],
imports: [
BrowserModule,
CoreModule,
NgbModule.forRoot(),
SimpleNotificationsModule.forRoot(),
],
bootstrap: [AppComponent]
})
export class AppModule {}
应用组件
...
<notifications></notifications>
核心模块
import {SimpleNotificationsModule} from 'angular2-notifications';
import {NotificationsComponent} from
'./notifications/notifications.component';
@NgModule({
imports: [
CommonModule,
FormsModule,
HttpModule,
RouterModule,
SimpleNotificationsModule
],
declarations: [...],
exports: [NotificationsComponent]
})
export class CoreModule {
constructor(@Optional() @SkipSelf() parentModule: CoreModule) {
throwIfAlreadyLoaded(parentModule, 'core module');
}
}
通知组件
import {Component, ViewEncapsulation} from '@angular/core';
@Component({
selector: 'notifications',
template: `<simple-notifications [options]="notificationOptions">
</simple-notifications>`,
styleUrls: ['./notifications.component.css'],
encapsulation: ViewEncapsulation.None
})
export class NotificationsComponent {
public notificationOptions = {
position: ['top', 'right'],
timeOut: 5000,
maxStack: 5,
lastOnBottom: true
};
}