将 ngrx 集成到我的代码中

Integrate ngrx into my code

我正在尝试了解如何将 ngrx 添加到我当前的项目结构中。

我已经了解了 ngrx/reflux 的所有概念。不过,我不太明白如何重建项目结构以便将其集成到我的项目中。

  1. 我需要在哪里添加减速器?
  2. 我需要在哪里添加状态?
  3. 行动呢?
  4. Store 应该在服务的哪个位置注入到每个组件中?
  5. 何时何地从服务器获取数据?

那边有什么项目结构最佳实践吗?

首先,您应该查看 @ngrx/store 文档:https://github.com/ngrx/store#setup

我做了一个小的(有趣的)项目来演示如何使用:
- angular
- ngrx/store
- ngrx/effects
- normalized state
- selectors

你可以在这里找到它:https://github.com/maxime1992/pizza-sync


为您提供一些有关其工作原理的信息:
- core.module.ts 是我声明我的根减速器
- root.reducer.ts is were I build the root reducer and compose it with middlewares 根据 dev/prod env
- 对于 reducer,我保留每个 related part together(接口 + reducer + 效果 + 选择器)

然后在组件内访问 store 只需像 that :
注入商店:

constructor(private _store$: Store<IStore>) { }

从其中一个获取数据
a) 选择器 (ex)

this._pizzasCategories$ = this._store$.let(getCategoriesAndPizzas());

b) 直接来自商店(例如)

this._idCurrentUser$ = this
      ._store$
      .select(state => state.users.idCurrentUser);

注意我没有 subscribe 这意味着我在我看来使用 async 管道所以 angular 为我订阅 Observable。

但当然你也可以手动完成并在你的 ts 中使用订阅。


PS: 我将发布一个启动器,其中包含所有已设置的内容,以避免浪费时间在开始一个新项目时。我将尝试在本周发布它,并在完成后立即更新此 post。或许对你有帮助。

编辑 2017 年 5 月 12 日
晚了,但我终于发布了首发:) !
https://github.com/maxime1992/angular-ngrx-starter