我正在使用"内存 - 内存" 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;
}