在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,但我已经做了大量的研究、视频和教程。有一大堆东西我现在还不太明白。
任何帮助都将不胜感激。
发布于 2019-02-22 06:33:33
这也取决于你的模块上有什么。另外,我建议使用接口而不是模型的类(就像你的数据一样)。
看一下这个示例,可能会有所帮助:https://stackblitz.com/edit/example-angular-in-memory-web-api?file=app%2Fapp.component.ts
发布于 2019-02-22 07:03:52
尽管经过了两天的有目的的研究和更多的一般研究,但在我崩溃发布这个问题后不到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;
}
https://stackoverflow.com/questions/54817087
复制相似问题