问题标签 [ngrx-store-4.0]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
727 浏览

angular - 如何将@ngrx/store 集成到 Angular 5 项目中?

我正在使用 @ngrx/store 开发 Angular 5 项目。将 ngrx/store 集成到我的应用程序中的方法如下。

我有包含商店的 CoreModule。在 store 目录中,有名为 search 和 user 的目录,还有 reducer.ts 和 index.ts。

减速器.ts

索引.ts

为了将 CoreStoreModule 集成到根模块中,我遵循了这种方式。

在core目录下的index.ts

和根模块的 app.module.ts

编译时我没有遇到任何错误,但减速器从不工作,调度操作时没有任何反应。我正在使用的库是

提供有关如何使用ngrx/store 5 的信息的文档不多。有人可以提供一些有关它的信息吗?如何将 @ngrx/store 集成到 Angular 5 项目中?

0 投票
1 回答
925 浏览

angular - TS2345 类型参数...不可分配给类型参数

我有一个延迟加载的存储,它返回一个带有整个应用程序存储的特定选择器(即它没有减少)。此 index.ts 中的其他选择器已正确减少。当我尝试从组件调用此选择器时:

我收到一个打字稿错误,上面写着:

另一个奇怪的事情是,当我将鼠标悬停在选择器上时(在本例中为 getBpFailed),类型提示并未将其定义为 MemorizedSelector,而其他(工作)选择器被定义为 MemorizedSelector。

关于如何调试的想法?我一直在把我的头撞到墙上太久了。

0 投票
2 回答
21526 浏览

angular - NullInjectorError:ReducerManager 没有提供程序

我正在使用新的ngrx 5。这是包含reducers 和featureSelector 的文件:

这就是我导入 storeModule 的方式

我已经按照这个教程

当我运行该应用程序时,我收到以下错误:

但是,如果我确实在提供程序中提供了 ReducerManager,我会收到此错误:

0 投票
0 回答
26 浏览

angular - 每次打开组件时都会重置状态

我有以下减速器:

这是PartnerState

这是组件中的代码

this.getPartner()调用服务并检索伙伴。成功后,合作伙伴像这样存储在商店中this.store.dispatch(new StorePartnerAction(response))

但是每当我在浏览器中刷新路由时,我都会收到以下响应:

页面重新加载时的预期响应:

0 投票
1 回答
171 浏览

angular - 升级 ngrx 2 -> 4. 输入解构数组时遇到问题

错误是说它action.map.

悬停在上面时也会出现DataActions.AddDataAction错误Tuple type '[Action, AppStore]' with length '2' cannot be assigned to tuple with length '5'


这是我的相关软件包及其版本package.json

0 投票
1 回答
1810 浏览

angular - 具有多个相关实体的 ngrx `forFeature`

我们正在尝试forFeature为我们的应用采用一种模式。然而,多个特征是相关的。

我们有一个同时显示多个实体关系的应用程序。

例如考虑我们有以下实体

  • 产品
  • 供应商
  • 国家
  • 货币
  • 港口

在哪里作为模型

然后在product-detail页面中,我们显示产品的&currency以及country名称和countrysupplier

考虑到我们还有一个supplier-details page显示上述供应商信息及其最近 10 种产品的地方。

当前处理所有这些的方式是使用这样的存储结构:

这是通过根中的单个存储完成的。

然而,应用程序文件夹结构是这样划分的:

正如您所看到的,文件夹结构有点杂乱无章,因为我还不确定该放在哪里harbour, 因为country其中currency一些是一般实体。

但是,我正在研究其中的forFeature一点,ngrx我想知道如果我们碰巧使用它以及功能是否可以一起使用,所有这些将如何组合在一起。

  • 这些实体中的每一个都是一个forFeature吗?
  • 还是应该将所有这些东西放在一个地方并具有一个entity功能,以便我的商店看起来与现在一样?
0 投票
1 回答
361 浏览

javascript - 链式减速器 ngrx

我有特征缩减器,例如LoadReducerDeleteReducerCreateReducer. 它们都只是简单的减速器。(另外我有一个名为 namedReducer 的高阶减速器

我想在我的应用程序状态中创建子状态,这些子状态正在使用我的功能缩减器的子集。例如:

应用状态:

有了这个,当我调度一个动作时{name: 'banana', type: 'Load'},它会遇到香蕉 LoadReducer。是否有任何模式或任何建议?我已经尝试过compose,但也combineReducers没有运气。我错过了什么。有没有将功能链接在一起的工具。

非常感谢。

问候, 塔马斯

0 投票
1 回答
166 浏览

angular - 在新组件添加屏幕中显示 id 的角度 ngrx 数据

我克隆了:https ://github.com/johnpapa/angular-ngrx-data并添加了一个名为 alerts 的新组件。但是,当我在警报上单击“添加”时:

  1. 它显示了“id”字段,而没有显示在英雄中。
  2. 保存按钮被禁用,而在英雄中它被启用。

谁能说出导致这些问题的警报组件和英雄组件之间的区别是什么?

在此处查看我的源代码:ngrx-data-alerts-component

在此处输入图像描述

0 投票
3 回答
966 浏览

angular - @ngrx/store createSelector() 真的有必要吗?

我真的很喜欢干净的 APIthis.store.select('media', 'games');

我不需要创建任何选择器createSelector(),也不需要导入任何东西。当项目变大时,我觉得选择器会成为这个伟大的中间层。media.selectors.ts成为一个整体文件。

我最终有很多选择器做简单的事情,所以而不是:

我愿意:

movies例如,同上:

我知道createSelector()有记忆的好处,但我非常怀疑做简单的选择strings会慢得多......

我读过的每一个指南都要求你必须使用createSelector()

所以我的问题是,什么时候适合使用createSelector()?可以使用字符串选择器,还是不赞成并且是不好的做法?

0 投票
2 回答
699 浏览

angular - @ngrx/store reducer 有效载荷验证保护

我经常让我的减速器@ngrx/store为状态设置值,有时来自 http 请求

我看到的所有示例和教程都只是简单地将有效负载设置为状态,或者将有效负载设置为通过Object.assign或传播的状态中的键。

问题是,如何验证有效载荷是否有效?对我来说,有很多情况下有人通过this.store.dispatch(). 它将采用错误的格式,或者会丢失密钥等,这会带来无声的错误,因为商店reducer会弄乱状态。尤其如此http requests

这导致我的团队项目到处都是空检查,因为我们不再信任商店。

人们如何验证或保护他们的商店免受不良数据的影响?

我有一些阅读的想法:

如何检查两个对象是否具有相同的一组属性名称?