在Angular 7中开发应用程序时,我正在使用Angular-In-Memory-Web-Api模拟后端。我的FakeBackendService显示为:
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 }
}
}
然后我有一个服务正在调用此服务,目的是返回一个强类型的可观察对象,如下所示:
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,如下所示:
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的新手,但是我一直在做大量的研究,视频和教程。我现在还不太了解很多事情。
任何帮助将不胜感激。
答案 0 :(得分:0)
这也取决于您的模块。另外,我建议为模型(例如您的一个Data)使用接口而不是类。
看看这个示例,可能会有所帮助: https://stackblitz.com/edit/example-angular-in-memory-web-api?file=app%2Fapp.component.ts
答案 1 :(得分:0)
尽管进行了为期2天的专门研究,甚至花费了数小时的常规研究,但在我细分以提出此问题后不到20分钟,我便找到了解决方案。请注意,我不确定这是否是一个好产品,但是它确实有效。
我以前已经发现过responseInterceptor方法。我当时遇到的问题是,它假定只有一组数据收集。是这样的:
protected responseInterceptor(res: ResponseOptions, ri: RequestInfo): ResponseOptions {
res.body = this.dbData;
return res;
}
这可以工作并返回强类型的数据,但是如果我的createDb()方法返回了其他数据,例如:
createDb() {
return { "tasks": this.dbTasks, "schedules":this.dbSchedules }
}
这意味着我只能返回1个数据集,因此必须一成不变。至少我就是这么想的。然后,我实际上将RequestInfo对象记录到控制台,看到它具有一个集合属性,其数据被强类型化。目前我的解决方案是:
protected responseInterceptor(res: ResponseOptions, ri: RequestInfo): ResponseOptions {
if (ri.resourceUrl.indexOf('tasks') > -1) {
res.body = ri.collection;
}
return res;
}