在angular2/4中包含rxjs存储的最佳实践/正确方式是什么?它应该在引导或导入中?
当我读到ngrx时,我看到了包括商店的不同方式: 我看到的一种方法是在导入中包括:在angular2/4中包含rxjs存储的最佳实践/正确方式是什么?它应该在引导或导入中?,angular,rxjs,ngrx-store,Angular,Rxjs,Ngrx Store,当我读到ngrx时,我看到了包括商店的不同方式: 我看到的一种方法是在导入中包括: @NgModule({ imports: [ ... omitted StoreModule.provideStore(AppReducer), ], declarations: [ AppComponent ], bootstrap: [AppComponent] }) export class AppModule { }
@NgModule({
imports: [
... omitted
StoreModule.provideStore(AppReducer),
],
declarations: [
AppComponent
],
bootstrap: [AppComponent]
})
export class AppModule {
}
我看到的另一种方法是将其包括在引导中:
import {bootstrap} from 'angular2/platform/browser';
import {App} from './src/app';
import {provideStore} from '@ngrx/store';
import {ItemsService, items, selectedItem} from './src/items';
bootstrap(App, [
ItemsService, // The actions that consume our store
provideStore({items, selectedItem}) // The store that defines our app state
])
.catch(err => console.error(err));
哪个是正确的和/或是公认的最佳实践?为什么?
我查看了一个没有rxjs商店的项目中的随机app.module.ts文件,我想知道它应该放在这样的文件中:
https://github.com/AngularClass/angular2-webpack-starter/blob/master/src/app/app.module.ts
请随意参考2017年5月angular2/4应用程序在与RxJS集成方面的组织方式。根据ngrx回购协议中的示例,我在
导入下提供存储
同样的事情也会发生。它将其置于导入下
我没有意识到在bootstrap
下放东西有什么不同,但是在NgModule imports
部分将其分离出来似乎更干净。我喜欢尽可能保持我的AppModule干净
有一天,当我在用Angular思考模块结构和水疗设计时,我看到了一个来自Wassim Chegnam的例子。这是关于有角的模块,他画了这个:
我非常喜欢有3个主要模块的想法:
-功能
-共享
-核心
如何使用它们:
- 与我们的应用程序直接相关的所有功能
- 共享我们想从任何地方轻松导入的所有内容
- Core用于与项目配置相关的所有内容(主要是带有
forRoot
的模块)
因此,在您的情况下,我将StoreModule.provideStore(appeducer)
放在CoreModule
()
显然,您可以使用更简单的模块结构,但在我在一个应用程序和一个小型/中型应用程序中使用这种方式演示如何使用ngrx()之后,感觉是一件好事=)
最后,我确实有一个AppModule
非常干净:
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
CoreModule,
SharedModule,
AppRoutingModule
],
bootstrap: [AppComponent]
})
export class AppModule { }
如果我需要使用angular universal,我可以从app.module.ts
切换到app.module.universal.ts
编辑:2017年5月14日
几天前,我在Github上发布了一个ngrx初学者,我试图描述所有这些,并包括过去8个月里我发现的许多好东西。有些人可能会感兴趣:共享模块应该包含在功能模块中,否则在您的图片中核心和共享之间没有区别。因此,如果存储是应用程序的“数据库”,那么核心模块中的“存储”和SharedModule中的“存储”有什么区别?不是应用程序中的所有组件都需要应用程序的所有功能/组件都可以访问存储吗?糟糕,我不需要SharedModule
中的StoreModule
。原因:StoreModule
正在导入服务,并且服务可用于子模块(即使是那些延迟加载的,与组件和管道不同)。所以从理论上说,是的,我们想“分享”它,因为我们将从整个应用程序中使用我们的商店。但是,当我们使用forRoot从CoreModule导入它以传递根减缩器时,我们不需要在SharedModule中再次加载它。(希望我清楚)。@JuliaPassynkova yes SharedModule是为了在整个应用程序中使用而设计的。我做了一个编辑,让您知道我已经构建了一个ngrx starter:)它可能会帮助您理解所有这些!
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
CoreModule,
SharedModule,
AppRoutingModule
],
bootstrap: [AppComponent]
})
export class AppModule { }