问题标签 [ngrx-entity]
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/selector 和 ngrx/entities 接收具有特定键的数组
如何使用选择器仅通过某个键获取数据?
也就是说,我有 4 个菜单,每个菜单都有一个特定catalogCode
的 ,用户在单击时从服务器获取特定菜单的列表。此列表的每个元素都有一个id = code + catalogCode
. 也就是说,catalogCode
这个菜单的所有元素都是相同的。那么如何catalogCode
从商店中获取特定商品的列表呢?
我正在尝试这样做:selectByCatalogCode
但这在组件中使用时不起作用,总是显示未定义的值
目录项.ts
我只提供了部分代码。如有需要,我可以提供整个店铺的代码。
效果.ts
目录-list.component.ts
angular - ngrx 实体应该存储在功能级别还是应用级别?
我正在尝试使用 ngrx 构建应用程序。例如,假设这是一个项目管理应用程序(例如 Jira)。要求说它应该使用ngrx构建。
在此应用程序中,我确定了以下功能:
- 板(看板列表)
- 项目管理
- 问题管理
- 仪表板(所有功能/项目/板/设置/其他的概述)
所以我的文件夹结构可能如下所示:
我还有一组实体(使用 ngrx 的实体模块存储)。这些实体有点明显:项目、问题、董事会。
我遇到的麻烦是找到将实体存储在我的商店中的最佳方式,特别是因为它们在我的不同模块之间共享。例如:
- Dashboard 需要 board、project 和 issue 实体。
- 董事会需要董事会、项目和发行实体。
- 项目需要项目和问题实体。
- 问题需要问题实体。
这些实体应该存储在功能模块级别还是根存储级别?
如果我将它们存储在功能级别,它可能如下所示:
但是加载部分有点尴尬。例如,当我的仪表板尝试显示问题时,它们可能尚未处于我的状态。我将调度一个类似的动作new fromDashboard.loadIssues()
,这个动作将被一个加载问题的效果捕获,但这个效果存在于问题功能中。因为几乎所有功能都可以加载问题,所以我的 loadIssues 效果(位于问题功能文件夹中)将不得不听 fromDashboard.loadIssues、fromProject.loadIssues 和 fromBoard.loadIssues。它看起来很奇怪,因为我不喜欢问题功能应了解仪表板/项目/板。
另一种方法是将其存储在根级别,例如:
实体动作和减速器将位于core
模块中的位置。减速器和效果器仍然需要监听多个动作(例如 fromDashboard.loadIssues、fromProject.loadIssues 和 fromBoard.loadIssues),但对我来说,如果核心知道所有功能(毕竟它是应用程序)。
但不知何故感觉不对,或者至少对我来说它看起来不像标准的ngrx方式,但我可能错了。
谢谢你的帮助。
ngrx-entity - 当ngrx实体返回未定义的id时如何解决问题
为什么会出现以下错误以及如何解决此问题。
传递给 selectId 实现的实体返回未定义。您可能应该提供自己的 selectId 实现。通过的实体:
angular - 使用@ngrx/entity,如何更新项目数组
我正在使用@ngrx/entity
,这会创建一个如下所示的状态:
@ngrx/entity
确实为我们提供了一些很酷的帮助来更新项目,但似乎(从我在文档中看到的)仅限于更新整个实体。
但是,当用户切换“喜欢”按钮时,我希望在我的减速器中仅state.entities[2].likes
使用响应更新该属性。
关于如何解决这个问题的任何想法?
database - 存储仅包含记录子集的 NGRX 实体
最近制作了一个使用 NGRX 实体进行状态管理的组件,之前我们直接使用了 NGRX action->reducer->effect->selector。
从第一印象开始,在我看来,设计模式希望您将模型中的总记录集加载到状态中,这就是我所做的。然后我开始思考,当这个模型开始包含大量数据时会发生什么。
所以问题是,如果您只将数据子集加载到状态中,实体是否有意义?
例如,如果我只加载一个子集,那么当在商店中作为操作实现时,对该数据的表中的列进行排序就不起作用(正如用户所期望的那样)。
ngrx - @ngrx/entity 的附加参数
我想将员工数组和页面加载状态保持在商店状态。所以我的初始状态会是这样的
现在我想将@ngrx/entity 用于员工而不是数组。该文档仅显示使用具有整个状态的实体的演示。
如何仅将实体用于一个属性而不是整个状态?
如果不可能,上述情况的替代方案是什么?
arrays - “数字”类型的参数不能分配给“数字和字符串”类型的参数
我想Array.prototype.includes
在我的 ts 文件中使用方法,例如。
ids
数字数组在哪里。我总是得到一个编译错误:
Argument of type 'number' is not assignable to parameter of type 'number & string'
当显式将 id 转换为数字Number(id)
时,我也看到了Type number is not assignable to type string
。当我明确地将 id 转换为字符串时id.toString()
,我可以看到Type string is not assignable to type number
.
这是压倒性的。如何includes
在 TypeScript 中使用方法?如何在我的示例中使用它?
[编辑]扩展示例:
val.ids.includes(selectedId as any)
也不起作用。
ngrx - 一个动作似乎覆盖了另一个不相关的切片
我不太确定如何解释这一点,但这里有一张图片可以帮助解释我似乎面临的问题。
如您所见,我有 aSharedNotificationsModule
和 a SharedConversationsModule
,它们彼此完全分开,并且每个都包含自己的状态文件。
我正在将其SharedNotificationsModule
导入我SharedHeaderModule
的,因为这是大多数与通知相关的内容所在的位置。
但是,如果我导航到ConversationsPage
并且LOAD_CONVERSATIONS_SUCCESS
被触发,我的前一个notifications
切片将被覆盖。
这不仅发生在LOAD_CONVERSATIONS_SUCCESS
操作上,也发生在其他页面上,但有时获取用户的操作或获取用户配置文件的操作(导航到用户配置文件页面时)。
我不确定您希望看到什么/如果有任何代码,但请告诉我您想要什么。
angular - 尽管 DELETE 出错,实体仍从缓存中删除
我正在使用 Angular 8@ngrx/data
来管理我的实体。当我启动失败的删除操作(服务器返回 500)时,实体会从 ngrx 客户端缓存中删除,尽管它没有在服务器上被删除。
如何防止实体因错误而从缓存中删除?或者如何在出错时将(非)删除的实体重新添加回缓存?
angular - 当在后端定义相关id时,如何为实体适配器定义selectId?
我正在我的商店中调度 upsert 操作/reducer 以向状态添加新记录,并且有一个效果会调用后端并将记录/文档添加到我的 mongodb 实例。
鉴于此特定模型的唯一合理 id 是在创建文档时由我的后端逻辑定义的,我应该如何在前端的实体实现中定义 selectId?
目前,一个项目被添加到状态,id: undefined
我收到警告:
entity.js:76 @ngrx/entity:传递给
selectId
实现的实体返回未定义。您可能应该提供自己的selectId
实现。
我的适配器定义为:
相关的效果是:
publishedData.doi
是我需要用来引用实体的违规字段。