5

试图理解这里的 ngrx/data 实体数据服务示例其中显示“创建实体数据服务”。在展示了该服务之后,文档继续展示如何在组件中使用 ngrx/data。我感兴趣的组件部分是这样的:

getHeroes() {
  this.heroService.getAll();
}

启动 HTTP 请求的文档状态getAll(),但我不确定该请求实际上是在哪里或如何发出的。在ngrx-data 存储库中。它声明用以下代码替换 heroService:

import { Injectable } from '@angular/core';
import {
  EntityCollectionServiceBase,
  EntityCollectionServiceElementsFactory
} from 'ngrx-data';
import { Hero } from '../core';

@Injectable({ providedIn: 'root' })
export class HeroService extends EntityCollectionServiceBase<Hero> {
  constructor(serviceElementsFactory: EntityCollectionServiceElementsFactory) {
    super('Hero', serviceElementsFactory);
  }
}

文档状态ngrx-data handles getting and saving our data for us。太好了,但我不知道获取数据的位置。我克隆了 repo,检查了finish分支,找不到到达端点的东西。

例如,用于获取所有英雄的服务http.get(${api}/heroes)getAll()但是被上面的代码替换了,那么这些调用发生在哪里?

我注意到EntityCollectionServiceBase有一个getAll()方法。但是该服务的配置在哪里注册相应的端点?我确定我在这里遗漏了一些非常简单的东西。

4

3 回答 3

3

从广义上讲,EntityCollectionServiceBase调度动作和通过调用中的持久效果并将响应映射到其成功/失败动作。请参阅架构概述EntityEffectsDefaultDataService

因此,如果您想访问/转换从 API 返回的数据,您可以扩展/替换DefaultDataService. 您可以使用它注册您的自定义数据服务EntityDataService,它基本上是获取或创建数据服务的数据服务注册表(如果不存在,则使用默认值)。

在此处输入图像描述

于 2020-03-02T16:55:37.757 回答
1

您可以在 app.module 中为其注册提供程序

  providers: [
{ provide: DefaultDataServiceConfig, useValue: defaultDataServiceConfig } ]

export const defaultDataServiceConfig: DefaultDataServiceConfig = {
root: 'myapi/baseurl',
timeout: 1000 * 60, // request timeout }
于 2019-10-02T17:27:07.190 回答
1

只需查看文档,就会发现DefaultDataService “从根路径和实体名称组成 HTTP URL”

文档还建议查看文档中下面的配置部分,以指定您自己的 url 以供 Entity DataService 进行交互。

在使用示例应用程序时,您可能会在开发工具的网络选项卡中看到正在使用的生成端点。

我希望这有帮助。

于 2019-07-16T07:01:33.990 回答