问题标签 [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.
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 项目中?
angular - TS2345 类型参数...不可分配给类型参数
我有一个延迟加载的存储,它返回一个带有整个应用程序存储的特定选择器(即它没有减少)。此 index.ts 中的其他选择器已正确减少。当我尝试从组件调用此选择器时:
我收到一个打字稿错误,上面写着:
另一个奇怪的事情是,当我将鼠标悬停在选择器上时(在本例中为 getBpFailed),类型提示并未将其定义为 MemorizedSelector,而其他(工作)选择器被定义为 MemorizedSelector。
关于如何调试的想法?我一直在把我的头撞到墙上太久了。
angular - NullInjectorError:ReducerManager 没有提供程序
我正在使用新的ngrx 5。这是包含reducers 和featureSelector 的文件:
这就是我导入 storeModule 的方式
我已经按照这个教程
当我运行该应用程序时,我收到以下错误:
但是,如果我确实在提供程序中提供了 ReducerManager,我会收到此错误:
angular - 每次打开组件时都会重置状态
我有以下减速器:
这是PartnerState
课
这是组件中的代码
this.getPartner()
调用服务并检索伙伴。成功后,合作伙伴像这样存储在商店中this.store.dispatch(new StorePartnerAction(response))
但是每当我在浏览器中刷新路由时,我都会收到以下响应:
页面重新加载时的预期响应:
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
angular - 具有多个相关实体的 ngrx `forFeature`
我们正在尝试forFeature
为我们的应用采用一种模式。然而,多个特征是相关的。
我们有一个同时显示多个实体关系的应用程序。
例如考虑我们有以下实体
- 产品
- 供应商
- 国家
- 货币
- 港口
在哪里作为模型
然后在product-detail
页面中,我们显示产品的¤cy
以及country
名称和country
。supplier
考虑到我们还有一个supplier-details page
显示上述供应商信息及其最近 10 种产品的地方。
当前处理所有这些的方式是使用这样的存储结构:
这是通过根中的单个存储完成的。
然而,应用程序文件夹结构是这样划分的:
正如您所看到的,文件夹结构有点杂乱无章,因为我还不确定该放在哪里harbour
, 因为country
其中currency
一些是一般实体。
但是,我正在研究其中的forFeature
一点,ngrx
我想知道如果我们碰巧使用它以及功能是否可以一起使用,所有这些将如何组合在一起。
- 这些实体中的每一个都是一个
forFeature
吗? - 还是应该将所有这些东西放在一个地方并具有一个
entity
功能,以便我的商店看起来与现在一样?
javascript - 链式减速器 ngrx
我有特征缩减器,例如LoadReducer
:DeleteReducer
和CreateReducer
. 它们都只是简单的减速器。(另外我有一个名为 namedReducer 的高阶减速器
我想在我的应用程序状态中创建子状态,这些子状态正在使用我的功能缩减器的子集。例如:
应用状态:
有了这个,当我调度一个动作时{name: 'banana', type: 'Load'}
,它会遇到香蕉 LoadReducer。是否有任何模式或任何建议?我已经尝试过compose
,但也combineReducers
没有运气。我错过了什么。有没有将功能链接在一起的工具。
非常感谢。
问候, 塔马斯
angular - 在新组件添加屏幕中显示 id 的角度 ngrx 数据
我克隆了:https ://github.com/johnpapa/angular-ngrx-data并添加了一个名为 alerts 的新组件。但是,当我在警报上单击“添加”时:
- 它显示了“id”字段,而没有显示在英雄中。
- 保存按钮被禁用,而在英雄中它被启用。
谁能说出导致这些问题的警报组件和英雄组件之间的区别是什么?
angular - @ngrx/store createSelector() 真的有必要吗?
我真的很喜欢干净的 APIthis.store.select('media', 'games');
我不需要创建任何选择器createSelector()
,也不需要导入任何东西。当项目变大时,我觉得选择器会成为这个伟大的中间层。media.selectors.ts
成为一个整体文件。
我最终有很多选择器做简单的事情,所以而不是:
我愿意:
movies
例如,同上:
我知道createSelector()
有记忆的好处,但我非常怀疑做简单的选择strings
会慢得多......
我读过的每一个指南都要求你必须使用createSelector()
所以我的问题是,什么时候适合使用createSelector()
?可以使用字符串选择器,还是不赞成并且是不好的做法?
angular - @ngrx/store reducer 有效载荷验证保护
我经常让我的减速器@ngrx/store
为状态设置值,有时来自 http 请求
我看到的所有示例和教程都只是简单地将有效负载设置为状态,或者将有效负载设置为通过Object.assign
或传播的状态中的键。
问题是,如何验证有效载荷是否有效?对我来说,有很多情况下有人通过this.store.dispatch()
. 它将采用错误的格式,或者会丢失密钥等,这会带来无声的错误,因为商店reducer
会弄乱状态。尤其如此http requests
。
这导致我的团队项目到处都是空检查,因为我们不再信任商店。
人们如何验证或保护他们的商店免受不良数据的影响?
我有一些阅读的想法: