为Angular 2实现HTTP服务模拟?
我试图用Angular编写一个模拟HTTP服务,它从JSON文件获取数据并返回该数据为Angular 2实现HTTP服务模拟?,angular,typescript,Angular,Typescript,我试图用Angular编写一个模拟HTTP服务,它从JSON文件获取数据并返回该数据 import { Request, RequestOptionsArgs, Response } from '@angular/http'; import { Observable } from 'rxjs/Observable'; export const HttpServiceMockup = { json = // get data from json file request(ur
import { Request, RequestOptionsArgs, Response } from '@angular/http';
import { Observable } from 'rxjs/Observable';
export const HttpServiceMockup = {
json = // get data from json file
request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {
// based on the passed url return some data from the json
// and wrap that data in a Observable of Response.
return null;
}
};
从'@angular/http'导入{Request,RequestOptionsArgs,Response};
从“rxjs/Observable”导入{Observable};
导出常量HttpServiceMockup={
json=//从json文件获取数据
请求(url:string |请求,选项?:RequestOptionsArgs):可观察{
//根据传递的url,从json返回一些数据
//并将这些数据包装成一个可观察的响应。
返回null;
}
};
如何包装数据,以便从'@angular/http'返回Observable
?导入{Request,RequestOptionsArgs,Response};
从“rxjs/Observable”导入{Observable};
导出常量HttpServiceMockup={
json=//从json文件获取数据
请求(url:string |请求,选项?:RequestOptionsArgs):可观察{
//根据传递的url,从json返回一些数据
//并将这些数据包装成一个可观察的响应。
if(url.url.indexOf('someUrl')>-1){
(数据)的可观测返回;
}
返回null;
}
};
更接近您当前的代码
import { Request, RequestOptionsArgs, Response } from '@angular/http';
import { Observable } from 'rxjs/Observable';
export const HttpServiceMockup = {
let data = [{id:1, name:"John"}];
request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {
// based on the passed url return some data from the json
// and wrap that data in a Observable of Response.
let response = null;
if (url.indexOf("YOUR_URL_MATCH")>=0)
response = new Response({body: JSON.stringify(data)});
return Observable.of(response);
}
};
一般来说,要将模拟数据包装到可观察对象中,只需执行以下操作
const mockData = {
id: 123
};
return Observable.of(mockData);
在您的服务方法中
当然,记住从'rxjs/Observable'导入{Observable}代码>为什么不使用现有的?然后,在
mockRespond
时,您可以在ResponseOptions
中提供适当的JSON作为主体。您的问题是如何返回可观察的数据,对吗?
import { MockBackend } from '@angular/http/testing';
import { Http, BaseRequestOptions } from '@angular/http';
@NgModule({
providers: [
BaseRequestOptions,
MockBackend,
{
provide: Http,
deps: [MockBackend, BaseRequestOptions],
useFactory: (backend, options) => { return new Http(backend, options); }
}
],
imports: [BrowserModule],
declarations: [App],
bootstrap: [App]
})
export class AppModule { }
export class App {
constructor(private mockbackend: MockBackend) {
let data = [{id:1, name:"John"}];
mockbackend.connections.subscribe(connection => {
if (connection.request.url.indexOf("YOUR_URL_MATCH")>=0)
connection.mockRespond(new Response({
body: JSON.stringify(data)
}));
});
}
}
const mockData = {
id: 123
};
return Observable.of(mockData);