问题标签 [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 投票
2 回答
802 浏览

angular - @ngrx/data 与 odata 后端服务器

我已经习惯了ngrx-store,但是为了摆脱样板,我决定使用ngrx-data。Ngrx-data 文档有一点限制,我很难找到实现 odata 模式的方法。

正如你在这里看到的,ngrx Entity DataService 有一个休息模式,所以它发送一个 put 像PUT api/heroes/1:但在 odata 模式中,您应该这样做:PUT api/heroes(1).

除此之外,我们在 OData 中还有使用 api 的函数和操作,例如: GET api/heroes/Default.GetMostPowerful(minimumPower=5).

此外,我们还有 Odata 的返回模式,它是一个包含数据的包装器,如下所示:

我怎样才能覆盖这一切?是否有任何服务可以扩展并提供给 Angular 以实现所有 odata 模式?

提前致谢!

- 编辑 -

感谢@Meligy,我可以执行 odata 持久性,但我仍在努力使用 odata 功能。这是我到目前为止所做的:

当你调用getByEmail('foo@foo.com')它时,它会调度动作,但我不知道如何扩展effects来调用我的扩展类,DefaultDataService然后使用获取的数据再次调度成功动作。

我已经DefaultDataService准备好扩展类中的函数来获取数据,但我正在尝试找到一种方法来从操作中触发它。

0 投票
1 回答
57 浏览

ngrx - 如果我收到的内容类型是 JSON-LD + Hydra,我应该使用 ngrx-data 吗?

我喜欢 JSON-LD、Hydra 的优势,并且刚刚了解了 NgRx/data。

我尝试在没有自定义的情况下使用它,这显然不起作用。今天我花了几个小时在文档上,这给我留下了更多问题。

重要的是,我不想牺牲任何关于收藏的信息。所以我不能只使用自定义效果。

关于如何解决这个问题的任何想法?

收藏回复:

单一响应:

0 投票
1 回答
1535 浏览

angular - 如何使用实体效果扩展 ngrx/data?

在将应用程序转换为使用 ngrx 状态管理时,我决定通过 EntityMaps 使用 ngrx/data 来管理某些模型的状态。到目前为止这工作正常,但是当事情变得更复杂时,例如基于从远程服务器获取的模型数据,我需要相关模型(订单->产品或 REST 端点格式GET orders/:id/products

我觉得卡住了——我知道在使用ngrx时有ngrx/effects来触发加载其他数据的动作,在这个ngrx/data guide中,提到了`EntityEffects来触发动作的副作用,但除此之外,文档似乎是正在进行中,现在对我没有多大帮助。

不幸的是,没有太多关于扩展 EntityEffects 来自定义远程数据的获取。当然,我可以一直执行选择器、操作、reducers、影响标准的 ngrx 方式,但不是 ngrx/data 的全部意义在于用更少的样板代码更容易地处理状态并充当包装器围绕ngrx,隐藏默认/样板代码但仍提供使用底层部分的方法?

由于我对ngrx和一般状态管理相对较新,我不知道在哪里可以找到最佳实践或推荐的解决方案,以及如何处理这个问题。

所以我的问题基本上是:

  1. 如何同时使用ngrx/data 和加载(相关)模型数据与ngrx/effects 或EntityEffects?
  2. 我在哪里扩展适当的服务/类,而不必手动实现每个 reducer/action,而是让 ngrx/data 来处理?

我已经搜索了 Stackoverflow、Gitter 并询问了同事,但没有成功 - 还是我让它变得比它必须的复杂得多?如果是这样,我很感激任何帮助。

注意:这个问题特别是关于 ngrx/

0 投票
1 回答
450 浏览

angular - 将提供程序注入 Angular 元素 (NGRX)

编译使用 NGRX 数据的 Angular 元素后,我的浏览器中不断出现以下错误:

在此处输入图像描述

我尝试在 NGRX 数据应用程序的每个 NgModule 中向提供程序添加和删除 EntityCollectionServiceElementsFactory,但没有成功(有两个模块)。

我有一个假设,我需要以某种方式将我的实体 NGRX 服务添加到注入器,但我没有关于如何这样做的示例。

我已经搞砸了好几天了,我无法弄清楚。

我的源代码如下:

在此处输入图像描述

这是我的 NGRX 数据实体服务之一的示例:

在此处输入图像描述

请帮忙,谢谢。

0 投票
1 回答
262 浏览

angular - NxRx-Data自定义DataService不使用DataServiceConfiguration

我像这样扩展了 DefaultDataService:

app-store.module.ts设置如下:

在我扩展 DefaultDataService 之前,defaultDataServiceConfig使用了 并且针对 custom 触发了请求root。现在每个请求命中localhost(似乎只使用当前主机)。

AppStoreModule不是延迟加载的模块,而是加载在AppModule. 触发请求的组件是StoreComponent. 我的第一个猜测是某些事情没有按照我期望的顺序发生。

什么时候创建并且CustomDataService覆盖CustomConfiguration服务仅在延迟加载的模块中起作用?

解决方案

我直接在 httpClient 中设置了绝对 URL,并将标识符传递给getById方法:

0 投票
0 回答
83 浏览

angular - 如何覆盖ngrx/data中实体的默认reducer实现

我正在尝试使用 ngrx/data 进行分页。在初始请求中,页面大小为 10,pageNumber 为 1。当我触发第二个页面大小为 10、页码为 2 的请求时。它正在截断旧值并保存从第二个 API 响应接收到的值。

我想附加从数据存储中的第二个 API 响应接收到的值(不丢失初始值)。为此,我猜可能覆盖默认减速器可能会有所帮助。

我检查了官方文档,但没有太大帮助。如果我得到小例子,那就太好了。

0 投票
1 回答
510 浏览

angular - Ngrx 数据 - 扩展 DefaultDataService

我正在尝试扩展 ngrx/data DefaultDataService 并覆盖一些方法。我必须在方法中更改的是 entityUrl,并且我必须发送一个 HttpParam(告诉拦截器应该将哪个 BE 服务用于特定的 Http 请求)。

所以我覆盖了getAll方法,如下所示:

但是它触发了 Http 请求,它不会触发任何 ngrx 事件。(接收到的数据,但未存储在 ngrx 存储中)

该实施在 Udemy 培训“NgRx(带有 NgRx 数据)-完整指南”中有效,但不适用于我。

有谁知道问题可能是什么?

0 投票
1 回答
218 浏览

angular - Ngrx Data GetAll 并修改路径

我对 Ngrx Data 完全陌生,正在尝试修改获取请求的 url。所以我有一个角色应用程序,它为经理提供了赋予用户角色的能力,并且需要根据应用程序 ID 和员工 ID 检索所有用户权限。

对于应用程序的这一部分,我需要调用一个 http 获取请求,例如https://localhost/AppAccess/UserPermissions/ {appId}/{employeeId} (即https://localhost/AppAccess/UserPermissions/11/2903) .

我怎样才能得到 ngrx 数据来调用它?到目前为止,getAll 无法获取 url,因此我无法添加路由参数。getByKey 会针对 selectId 引发警告,该警告旨在返回单个记录,而 getWithQuery 使用查询参数。

提前致谢!

0 投票
2 回答
380 浏览

angular - 如何为 AOT 编译配置 NGRX/Data

我有一个来自 NGRX 数据文档的标准设置和一个实体。一切都适用于 JIT,但是当我执行 AOT 时,我得到以下错误:

我的实体配置:

我的模块:

错误在这里抛出: EntityDataModule.forRoot(entityConfig)

版本:

0 投票
1 回答
299 浏览

javascript - 为集成测试设置 ngrx/data

我正在尝试设置一个集成测试,它将使用 ngrx/data 实体从后端 API 服务中获取一些数据。

我设置了这个 StackBlitz:https ://stackblitz.com/edit/ngrxdata-testing-not-working-pxfmkb?file=src/main.ts

它应该在启动时运行测试 - 我的测试用例中没有任何期望,但是我正在查看控制台日志并期望它显示登录ClientDataService/src/app/data/client/client-data.service.ts),即:

console.log('never goes here :(');

在集成测试(data.integration.spec.ts)中,我正在配置模块,定义客户端实体类型并包括AppDataServiceModule依次执行此操作:

如您所见,我正在按照ngrx docs的建议注册数据服务,在这里

我觉得我已经很接近了,但只需要朝着正确的方向轻推就可以让它发挥作用!