Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在angular2/4中包含rxjs存储的最佳实践/正确方式是什么?它应该在引导或导入中?_Angular_Rxjs_Ngrx Store - Fatal编程技术网

在angular2/4中包含rxjs存储的最佳实践/正确方式是什么?它应该在引导或导入中?

在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 { }

当我读到ngrx时,我看到了包括商店的不同方式:

我看到的一种方法是在导入中包括:

@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 { }