我有一个从端点获取数据的方法。
getManufacturers(): Observable<Manufacturers> {
const requestBody = { 'num': 12 };
return this.http.post<Manufacturers>(manufacturersUrl, requestBody).pipe(
catchError(this.httpErrorService.handleError<Manufacturers>(`getManufacturers`))
);
}
端点还没有准备好。我想在虚拟数据中存根,比如:
if(manufacturersUrl === 'dummy-data') {
return dummyData
}
有两个问题-- 1.我该用什么来包装这些数据?BehaviorSubject.asObserver
?2.有没有一种破坏性较小的方法来做到这一点?我可以在不以更优雅的方式更改代码的情况下更改结果吗?
发布于 2019-04-22 12:11:13
您只需返回数据
if(manufacturersUrl === 'dummy-data') {
return of(dummyData)
}
发布于 2019-04-22 12:19:21
使用角的InMemoryWebApi。在内存数据服务中添加虚拟数据.使用它的优点是,一旦实际的API准备好(只需要更改URL),您就不必修改太多的代码。
在应用程序模块中的HttpClientInMemoryWebApiModule
之后导入HttpClientModule
,以便接收HttpClientModule
请求。
@NgModule({
imports: [
...
HttpClientModule,
HttpClientInMemoryWebApiModule.forRoot(InMemoryDataService,
{
dataEncapsulation: false,
passThruUnknownUrl: true
}),
...
],
...
})
您的内存中数据服务将类似于:
import { InMemoryDbService } from 'angular-in-memory-web-api';
export class InMemoryDataService implements InMemoryDbService {
createDb() {
const heroes = [
{ id: 11, name: 'Mr. Nice' },
{ id: 12, name: 'Narco' },
{ id: 13, name: 'Bombasto' },
{ id: 14, name: 'Celeritas' },
{ id: 15, name: 'Magneta' },
{ id: 16, name: 'RubberMan' },
{ id: 17, name: 'Dynama' },
{ id: 18, name: 'Dr IQ' },
{ id: 19, name: 'Magma' },
{ id: 20, name: 'Tornado' }
];
return {heroes};
}
}
你的要求会是:
constructor(private http: HttpClient) { }
getHeroes() {
return this.http.get('api/heroes') // you just need to change this URL, once your API is ready
}
编辑
要调试请求,请在responseInterceptor
类中添加一个InMemoryDataService
。
responseInterceptor(res: ResponseOptions, ri: RequestInfo) {
console.log(`response`, res);
console.log(`request`, ri)
return res
}
https://stackoverflow.com/questions/55794183
复制相似问题