问题标签 [angular-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 回答
1244 浏览

ngrx - 如何在 EntityCollectionService 上使用 setFilter

我想知道 @ngrx/data 中的 EntityCollectionService 的 setFilter 方法是如何工作的。文档提示了它的使用方式,但没有显示实际使用的 setFilter(pattern: any) 函数的示例。由于参数可以是 any 类型,因此我无法真正推断出应该在这里做什么。

基本上,我有一个使用 @ngrx/data 模块的数据存储中的对象列表。我想定义一个过滤器,以便我可以订阅 EntityCollectionService 的过滤实体 $ 可观察对象。我可以成功订阅entities$ observable 并收到完整的未过滤列表。以前,我在 EntityCollectionService 之外进行过滤,但我想利用内置的过滤机制。

上面的代码是我尝试正确设置过滤器的最佳方法。显然,这并没有像我预期的那样工作。将过滤器设置为过滤器功能时,即使我可以看到set filter操作按预期触发,也没有任何变化。此时实体仍未被过滤。被标记为的参数pattern: any让我认为它应该是一个函数以外的东西,但我不能再从文档中推断出它所期望的东西。

0 投票
1 回答
1133 浏览

rxjs - 我无法获取 NgRx 数据来触发 API 调用

我尝试使用覆盖 EntityData getAll() 函数的服务设置 NgRx Data,以便我可以调用 API。但是当我调用 EntityService.getAll() 时没有任何反应

entity-metadata.ts :EntityMetadataMap 的标准定义,我在其中定义了一个名为 PageLoadData 的实体

我的 AppModule.ts

page-load-entity-service.ts :我遵循 NgRx Data 的标准文档并创建了如下服务:

page-load-data.service.ts :创建此服务以覆盖 DefaultDataService 的 getAll 功能

app.resolver.ts :我在加载 EntityService 时使用解析器调用 getAll

app.routing.module.ts

这是我的应用程序组件:

应用组件 html

这是 redux 检查器:

redux 事件截图

即使我尝试从解析器中订阅,也不会触发 API 调用和错误。我不明白为什么。但是在 redux 检查器中,getAll 被触发但它是灰色的。不确定那是什么意思

github 链接在这里:https ://github.com/rmoubayed/ngrx-data-test-env如果有人想克隆并尝试它。

0 投票
1 回答
841 浏览

angular - NGRX/数据实体 getAll 将旧数据与新数据连接起来,而不是更新

我正在尝试使用ngrx-data-lab作为我的项目的示例。

这是我使用的项目的stackblitz

我不能使用我正在使用的服务器的实际 url。该网址属于我的公司。但是发生的事情是服务器正在将随机生成的数据返回给应用程序。问题是商店中的实体没有被替换,而是被添加了。每次我刷新英雄页面时,服务器都会带来新数据并将其与旧数据连接起来。

entity-store.module.ts 中,我将defaultDataServiceConfig根和 Hero url 更改为我的服务器。getAll() 有效,但正如我再次所说,它将数据连接到旧数据。

如何让 getAll 替换旧数据而不是连接它?

0 投票
1 回答
94 浏览

angular - 为什么解析器和带有ngrx数据的组件之间会修改数据?

我使用解析器从后端获得了一小部分主题。我已经自定义了 getAll() 方法以从我的本地服务器中检索它。当我记录它时,我在修改后的方法中得到了完整的数组,但是当我使用 entityService 实体$ observable 时,我只得到数组的第一项。我究竟做错了什么?

修改后的dataService方法:

解析器:

我已经在后端修改了数组,现在它可以按预期工作了。我还是想知道以前哪里出了问题。我假设 ngrx 数据期望它接收到的数据具有某种格式?

后端中的先前数组:

后端修改数组:

0 投票
3 回答
3492 浏览

angular - 为 ngrx/data 实体创建选择器

我有一个状态,我想从 ngrx/data 实体创建选择器。

如何使用预定义的选择器或使用来自 ngrx/data 的实体或服务编写自己的选择器?

例如,我想创建一个选择器来选择所有“社区”实体,然后在第 2 步中选择 1 by selectRouteId。如果您想象一个 route /communities/:idselectRouteId返回 Id,现在我想要来自的数据CommunityService并使用在步骤 1 中创建或以某种方式导入和使用的选择器并返回一个结果 1CommunityselectRouteIdid,所以我以后可以做就像是this.store.dispatch(selectCommunityByCurrentRouteId);

这个问题特定于@ngrx/data。

0 投票
1 回答
474 浏览

angular - NgRx Data - 如何以类型安全的方式连接到 addOne 成功操作?

我是新手@ngrx/data,我正在浏览文档。

使用该指南,我已经能够复制我以前手动完成的操作 - 例如使用此概述页面上的服务,以下工作调用 REST-API 并将供应商添加到商店。

组件.ts

我知道我可以做到以下几点:

但是 - 通常是否有一种类型安全的方法可以连接到成功的 API 调用操作/实体操作?

更新 - 澄清

我正在使用@ngrx/data因此我不会直接自己创建操作以及类型的导出。

成功添加供应商后 - 在 http 调用后会产生一个类型为的操作:'[Supplier] @ngrx/data/save/add-one/success'- 我想执行一个效果。除了使用字符串'[Supplier] @ngrx/data/save/add-one/success'(如上所示)之外,还有一个类型安全的钩子吗?

以前(当我自己创建动作时)我会导出一个联合类型并做ofType(supplierActions.addSupplier)

更新 - 更接近答案

找到了ofEntityTypeofEntityOp这让我更接近我的目标,因为这些工作如下ofType

现在只需找到一种'Supplier'entityMetadata

0 投票
3 回答
1288 浏览

angular - NGRX 数据 entityResourceUrl 取决于其他实体。动态网址?

通常,当我想指定实体的 url 时,我有一个特定的 url,例如serverURL/heroes。但是现在我有一个案例,我想使用属于其他实体的实体。例如,假设我想使用英雄的武器。我的剑 http url 看起来像:serverURL/heroes/heroID/weapons。所以假设我需要添加新剑,我唯一的选择是将它添加到特定的英雄,所以我需要知道 heroID 和剑信息来做类似的事情:HTTP POSThttp.post('serverURL/heroes/heroID/weapons', swordObject);

目前,当我在 DefaultDataServiceConfig 的 entityHttpResourceUrls 中添加英雄 url 时。您可以在 stackblitz 上查看示例。转到 app->store->entity-> entity-store.module.ts。那是我通常指定网址的地方。

我该如何处理我的案件?如何获得子实体的动态网址?

更新

根据我在这个问题中的发现,ngrx-data 还不支持参数。

https://github.com/ngrx/platform/issues/1934

0 投票
1 回答
71 浏览

angular - 可观察行为

我正在努力解决我认为非常简单的事情。本质上,我有一个 Angular 8 应用程序,并且正在使用 ngrx。我所有的 CRUD 操作都在工作,但我想在成功完成并添加或更新后导航到一个 url。

当我单步执行代码时,除了触发从可观察对象返回的更改外,一切正常,我尝试了两种不同的方法,似乎都从可观察对象返回,但不会完成下一步。

实际更新或添加到 firestore 和我的 ngrx 和 ngrx/data 存储中的记录完美运行唯一不起作用的是我在完成这些活动后提供的指令

为简化起见,我刚刚添加了一个控制台日志语句,而不是一个路由操作。当我调试时,我回到订阅或点击运算符,但它似乎没有执行该方法内的指令,也没有返回任何错误。

产品组件

第一种方法

第二种方法

实体服务

0 投票
1 回答
58 浏览

angular-ngrx-data - 获取ngrx/data的add操作的结果或HTTP响应

实体数据服务文档中所述,添加操作需要将实体保存在后端。它没有说的是它期望从后端返回创建的实体(带有 ID 等)。我的后端做到了,它按预期工作,但是

当我点击返回 Observable 的添加操作时,至少我的 IDE 为我提供了 Observable 方法以继续......最好用一段代码来演示

控制台根本没有记录任何内容。

我的问题是,我如何获得从 HTTP 服务返回的内容?例如实体,持久化到后端数据库?

0 投票
1 回答
1605 浏览

ngrx - 我们可以将 NgRx 数据与分页样式的 REST API 响应一起使用吗?

我目前正在使用 NgRx Data 对我项目中的几个实体执行 CRUD 操作。现在,我必须开发分页。因此,REST API 响应将如下所示:

AFAIK,NgRx 数据适用于实体,我不知道如何处理这个问题。你能把我引向光明吗?谢谢你。