问题标签 [ngrx-data]

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 投票
0 回答
40 浏览

ngrx - 如何扩展 EntityCollectionReducerMethods NgRx 数据

在将数据字段添加到商店之前,我需要对其进行解析。

我希望从覆盖 getAll() 中解析数据字段。
此代码不起作用有人可以解释为什么吗?

0 投票
1 回答
269 浏览

angular - 了解ngrx/data的能力

我正在尝试熟悉ngrx/data,但我不确定它的功能。我已经阅读了文档和一些教程,但仍然有很多问号:

  1. ngrx/data 提供了 CRUD 功能的方法。但是额外的非 CRUD 请求呢?是否可以为非 CRUD 请求(例如登录请求或其他内容)扩展 ngrx/data 并为此实现自己的操作、reducers 和效果?ngrx/data 的哪一部分必须扩展?实体动作?实体集合服务?实体集合减速器?关于这些东西的文档有点混乱,我真的不明白所有这些部分是如何协同工作的。也许有人可以对此进行澄清并提供一些示例代码。

  2. 在我的 Angular 项目中,我使用的是“传统”存储/操作/reducers/effects 模式。有时会在多个操作上触发效果(例如,成功的更新操作会触发从服务器重新读取)。是否也可以使用 ngrx/data 实现此行为?

  3. 是否可以在同一个商店实体上同时使用 ngrx/data 和“传统”商店模式?用于 CRUD 操作的 ngrx/data 和用于非 CRUD 操作的 store/actions/reducers/effects?

一些提示和想法会有所帮助。谢谢 :)

0 投票
1 回答
325 浏览

angular - 如何使用 @ngrx/data 自定义减速器?

我正在学习使用@ngrx/data,确实使用该库我推进了很多代码,但是在个性化它时我遇到了问题。我已经看到了如何向集合添加字段

export const entityMetadata: EntityMetadataMap = { User: { additionalCollectionState: { testing: null } } };

并在此处设置模块:

一切都很好,但是......,我如何添加自己的减速器,在文档中我看不太清楚

0 投票
1 回答
347 浏览

javascript - 如何为 ngrx/data 中的操作编写效果?

我在一个带有ngrx的项目中工作,还使用来自ngrx的其他库和包,如ngrx/entity或ngrx/data。

有时我需要在属于(就被调度而言)ngrx/data的某些操作中创建效果。

我发现一些困难的地方是调度其他动作,这些动作与ngrx / data以自动方式甚至我自己(自定义)调度的其他一些动作有很强的依赖性,如下所示

...

...

那么,如何监听ngrx/data中的QUERY_LOAD、通用get/all或其他任何动作来实现新效果的创建呢?它是否存在类似的东西

或者以另一种方式问,我如何在 ngrx/data 中为“ NATIVE ”操作编写效果?

我知道创建 ngrx/data 是为了尽可能多地摆脱 Actions、Selectors、Effects、Reducers,因此样板文件更少。但是,应该有一种方法可以从ngrx/data 创建效果。

提前谢谢了。

0 投票
1 回答
127 浏览

angular - 如何在操作文件中使用 entityActionFactory 来自定义 ngrx/data 中的操作?

我看到我们可以在ngrx/data中自定义我们的操作,如下所示

https://ngrx.io/guide/data/entity-actions#tagging-the-entityaction

在此处输入图像描述

因此,我的问题是如何在正常的***.actions.ts文件中创建这些自定义操作(示例

通过我之前写的entityActionFactory然后在效果中使用它?示例

可能吗?

提前谢谢了

0 投票
0 回答
210 浏览

ngrx-store - 覆盖 @ngrx/data、@ngrx/entity 操作、减速器、效果

我是@ngrx/data的新手,并试图了解如何覆盖reducer & actions

我当前的问题可以通过其他方式解决,例如添加额外的方法、reducer 和操作,但我将来可能需要这个答案。

问题是我的删除调用应该只是将项目设置为商店中的“隐藏”而不是删除它。

这是我正在使用的设置:https ://stackblitz.com/edit/ngrx-data-tutorial

0 投票
3 回答
1239 浏览

angular - 如何在@ngrx/data 中对 EntityCollectionServiceBase 进行单元测试?

我有一个虚拟服务:

我有以下测试:

它给了我:

NullInjectorError: No provider for EntityCollectionServiceElementsFactory

所以我更新如下:

但现在它给了我:

NullInjectorError: No provider for ScannedActionsSubject!

如何正确修复我的测试?

0 投票
1 回答
222 浏览

angular - 如何使用 NgRX 数据更新存储?

我的组件结构

在此处输入图像描述

如果 case.component 将案例数据缓存在商店的案例实体中,那么我从子组件(案例操作、案例活动......等)中获取该数据。

但是当我从任何子组件远程更新案例时,我不知道如何刷新父组件(case.component)中的缓存数据以再次将其复制到子组件上。

我正在尝试使用最佳实践。

0 投票
1 回答
1018 浏览

angular - Angulat 9 NgRx 数据添加方法 - 使用查询参数创建自定义端点;

我在 Angular 9 项目上使用 NgRx 数据,我正在尝试使用 add() 方法保存用户。缺点是 api 端点类似于

http://localhost:{{port}}/something/{{clientId}}/users

用户组件

用户服务

有没有办法解决这个问题?我不想修改后端端点。

0 投票
1 回答
1737 浏览

angular - 如何在@ngrx/data 中扩展自定义实体集合缩减器

在阅读并尝试了到目前为止的所有内容以将我的 AdditionalCollectionStates 更新为我的 EntityCollection 之后(基于文档中的一些信息,this SO Questionthis other SO Questionanother SO question来自github存储库的问题)我发现自己陷入了困境应该是一个相当普遍的任务,在使用ngrx之前完全没有问题:使用ngrx对存储的实体集合进行排序。搜索解决方案将我带回到我已经看过 5 次的相同的 10 个链接,大多数示例要么太基本,要么过时,要么根本不使用 ngrx/data,或者类似的问题根本没有答案。

环境:Angular 9.1.7,ngrx 9.1.2,macOS 10.14.6

目标

如排序和分页文档中所述,将own 添加和更新additionalCollectionState到我的 EntityCollection 中。我没有从服务器获取sortQuery属性(sortField、sortDirection),而是在我的 GUI 中设置它并根据它们对集合进行排序。我知道 EntityMetadataMap 上存在设置,但它对我的方式不够灵活,我想在整个应用程序中对不同 MatTables 中的集合进行动态排序。每当 MatTable 中的排序顺序/字段发生更改时,都应更新此附加属性。sortComparer

到目前为止我所取得的成就:

如上所述的附加CollectionState 的ngrx/data 方式有效,我的集合使用我在EntityMetadataMap 中提供的数据进行初始化。但是,更新自定义集合属性并不能按照我从文档中理解的方式进行。由于我没有从服务器获取sortQuery属性,因此不会调用 ResultsHandler。

我通过两种方式解决了这个问题:a)使用 ngrx 和 ngrx/entity 方法和 b)通过尝试扩展自定义EntityCollectionReducer的 ngrx/data 方式

a) 我成功创建了自定义 Action 和自定义 Reducer 并更新了state 属性,但没有更新之前定义的集合属性。我的行动基本上是:

它是从服务中调用的:

并在减速器中处理:

reducer 在 reducers/index.ts 中导出:

在 app.module 中设置为:

这将创建一个带有sortQuery属性的resourceSort集合,如该屏幕截图所示:并根据更改后的 sortQuery 属性对其进行更新。但是,我更喜欢在 Resource entityCache 集合中使用已经初始化的 sortQuery 属性(是的,我也尝试将其添加到entityCache功能中并忽略它):在此处输入图像描述 StoreModule.forFeature('entityCache', reducers)

在此处输入图像描述

b) 因此,另一种方法是在 app.module 中使用 EntityCollectionReducerRegistry:

从文档:

Entity Reducer 是存储实体缓存中所有实体集合的主 reducer。该库没有命名实体减速器类型。相反,它依赖于 EntityCacheReducerFactory.create() 方法来生成该 reducer,它是一个 NgRx ActionReducer<EntityCache, EntityAction>。

我有一种感觉,使用 b) 方法我可能走在正确的轨道上,但是我被缺乏如何处理这个问题的文档和示例所困扰 - 有没有人可以帮助我?

如果需要更多详细信息,我很乐意提供,如果有不清楚的地方,因为英语不是我的母语,我很乐意澄清,如有必要,请尝试提供一个简化的 stackblitz 示例。谢谢!