ngrx /数据实体数据服务

时间:2019-07-16 06:45:19

标签: angular ngrx angular-ngrx-data

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

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

文档指出getAll()会发起HTTP请求,但是我不确定该请求实际在何处或如何发出。在ngrx-data repo中。声明用以下代码替换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。很好,但是我不知道在哪里获取数据。我克隆了存储库,签出了finish分支,但找不到击中端点的内容。

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

我注意到getAll()有一个EntityCollectionServiceBase方法。但是,此服务的配置在哪里进行注册各自的端点?我确定我在这里缺少了一个非常简单的东西。

3 个答案:

答案 0 :(得分:2)

从广义上讲,EntityCollectionServiceBase分发动作,并通过EntityEffects中的持久效果调用DefaultDataService并映射响应使其成功/失败。参见Architecture Overview

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

enter image description here

答案 1 :(得分:0)

仅查看文档,看来DefaultDataService “由根路径和实体名称组成HTTP URL”

文档还建议您查看文档下面的Configuration部分,以指定您自己的url,以便与Entity DataService进行交互。

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

我希望这会有所帮助。

答案 2 :(得分:0)

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

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

export const defaultDataServiceConfig: DefaultDataServiceConfig = {
root: 'myapi/baseurl',
timeout: 1000 * 60, // request timeout }