首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从AngularInMemoryWebApi的createDb结果中检索特定的强类型对象?

如何从AngularInMemoryWebApi的createDb结果中检索特定的强类型对象?
EN

Stack Overflow用户
提问于 2019-02-22 06:16:37
回答 2查看 36关注 0票数 0

在Angular 7中开发应用程序时,我使用Angular- in -Memory-Web-Api模拟后端。我的FakeBackendService显示为:

代码语言:javascript
复制
import { Injectable } from '@angular/core';
import { InMemoryDbService, RequestInfo, ResponseOptions } from 'angular-in-memory-web-api';
import { Data } from './data';

@Injectable({
  providedIn: 'root'
})
export class FakeBackendService implements InMemoryDbService {

  dbData: Array<Data> = new Array(
    new Data(1, "Malcom", "09/11/1980", "Married"),
    new Data(2, "Reginald", "04/07/1992", "Single"),
  );
  constructor() { }

  createDb() {
    console.warn("createDb() CALLED");
    console.warn({ "tasks": this.dbData });
    return { "tasks": this.dbData }
  }
}

然后,我有一个调用此服务的服务,目的是返回一个强类型的可观察对象,如下所示:

代码语言:javascript
复制
  base_url: string = "/api/";
  tasks_endpoint: string = "tasks";

  constructor(private http: HttpClient) { }

  getTasks() : Observable<Data[]> {
    return this.http.get<Data[]>(this.base_url + this.tasks_endpoint);
  }

这是行不通的,因为返回的数据实际上是一个对象,它的“tasks”值实际上包含我正在寻找的格式化数据。我只是不确定如何打开get的结果来返回这个特定的数据。Data类本身是一个基本poco,如下所示:

代码语言:javascript
复制
export class Data {
    public id: number;
    public name: string;
    public chosenDate: string;
    public optionSelected: string;

    public testme(): string {
        return "do i exist";
    }

    constructor(id: number, name: string, chosenDate: string, optionSelected: string) {
        this.id = id;
        this.name = name;
        this.chosenDate = chosenDate;
        this.optionSelected = optionSelected;
    }

}

我尝试过在组件本身中转换数据,但似乎不起作用。此外,我觉得服务应该返回正确的数据,组件不应该担心这一点。

我刚接触Angular,但我已经做了大量的研究、视频和教程。有一大堆东西我现在还不太明白。

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2019-02-22 06:33:33

这也取决于你的模块上有什么。另外,我建议使用接口而不是模型的类(就像你的数据一样)。

看一下这个示例,可能会有所帮助:https://stackblitz.com/edit/example-angular-in-memory-web-api?file=app%2Fapp.component.ts

票数 0
EN

Stack Overflow用户

发布于 2019-02-22 07:03:52

尽管经过了两天的有目的的研究和更多的一般研究,但在我崩溃发布这个问题后不到20分钟,我就得到了一个解决方案。我不确定这是不是一个好的,提醒你,但它是有效的。

我之前已经发现了responseInterceptor方法。我当时的问题是,它假设只有一组数据集合。它是这样的:

代码语言:javascript
复制
  protected responseInterceptor(res: ResponseOptions, ri: RequestInfo): ResponseOptions {
    res.body = this.dbData;
    return res;
  }  

这种方法可以工作并返回强类型的数据,但是如果我的createDb()方法返回其他数据,比如:

代码语言:javascript
复制
  createDb() {
    return { "tasks": this.dbTasks, "schedules":this.dbSchedules }
  }

这意味着我的数据集中只有1个可以被返回,而且它必须是固定不变的。至少我是这么想的。然后,我实际将RequestInfo对象记录到控制台,并看到它有一个集合属性,该属性的数据是强类型的。我目前的解决方案是:

代码语言:javascript
复制
  protected responseInterceptor(res: ResponseOptions, ri: RequestInfo): ResponseOptions {
    if (ri.resourceUrl.indexOf('tasks') > -1) {
      res.body = ri.collection;
    }
    return res;
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54817087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档