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



我正在使用"内存 - 内存" api在Angular7中开发应用程序时模拟后端。

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 }
  }
}

i然后有一项服务,该服务是为了返回强烈键入可观察的意图,例如:

  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']值实际上包含我正在寻找的格式数据。我只是不确定如何打开返回此特定数据的结果。 data 类本身是基本的POCO,如下:

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的新手,但是我一直在进行大量的研究,视频和教程。我现在还不了解很多事情。

任何帮助将不胜感激。

它也取决于模块上的内容。另外,我建议将接口而不是类用于模型(例如您的一个数据)。

看这个样本,可能会有所帮助:https://stackblitz.com/edit/example-nangular-in-memory-web-api?file=papp/app.component.ts

尽管有2天有目的的研究甚至更多的一般研究,但在我分解以发布此问题的不到20分钟后,我得出了解决方案。请注意,我不确定这是否是一个好人,但它可以起作用。

我以前已经发现了响应Interpector方法。那时我的问题是,它假定只有1套数据集。这就是:

  protected responseInterceptor(res: ResponseOptions, ri: RequestInfo): ResponseOptions {
    res.body = this.dbData;
    return res;
  }  

这有效并返回强烈键入的数据,但是如果我的createb()方法返回其他数据,例如:

  createDb() {
    return { "tasks": this.dbTasks, "schedules":this.dbSchedules }
  }

这意味着我只能返回我的一个数据集,必须将其设置在石头上。至少这就是我的想法。然后,我实际上将RequestInfo对象记录到了控制台,并看到它具有强烈键入数据的收集属性。目前我的解决方案是:

  protected responseInterceptor(res: ResponseOptions, ri: RequestInfo): ResponseOptions {
    if (ri.resourceUrl.indexOf('tasks') > -1) {
      res.body = ri.collection;
    }
    return res;
  }

相关内容

  • 没有找到相关文章

最新更新