我正在阅读Angular 2 Tour of Heroes教程的第7部分。包含InMemoryWebApiModule后,hero.service.ts
使用private heroesUrl = 'api/heroes';
。
该应用如何知道WebAPI网址为api/heroes
?我没有在app-routing.module.ts
中看到这个定义。如何映射到InMemoryWebApiModule的URL工作?
答案 0 :(得分:4)
我在这里继续我的经历......不是对InMemoryWebApiModule的深入了解......
似乎" api"由InMemoryWebApi捕获。而且"英雄"是createDb()方法中定义的数据结构。
例如,我看起来像这样:
private baseUrl = 'api/products';
我的数据文件如下所示:
export class ProductData implements InMemoryDbService, InMemoryBackendConfig {
createDb() {
let products: IProduct[] = [ ...];
return { products };
}
}
答案 1 :(得分:1)
在该页面的顶部附近,他们为此定义了导入。
- 删除了非主题代码引用,我有点误解了这个问题.--
然后,在下面,他们为我们提供了所述项目的代码。
InMemoryWebAPI使用 https://github.com/angular/in-memory-web-api 创建一个本地数据库,调用它将引用它。该模块似乎是捕获/注册/ api调用的项目。
这只是使用实际后端的替代方法。
答案 2 :(得分:0)
InMemoryWebApi是一个有用的工具-它使用其内部约定。
应该使用createDb
方法返回一个对象,该对象的键(即,附加数据的位置)将与api URL的段匹配,因此为了处理heroes
的段,返回{ heroes: yourData }
。通常,在这种情况下使用速记:
const heroes = [ /* your data */ ];
return { heroes };
现在,api
是该库采用的默认前缀。可以更改它以适合您的特定情况,只需将其作为InMemoryBackendConfigArgs
参数的一部分来提供即可。例如,如果您知道英雄的终点位于myapi/v2/heroes
,请使用以下配置:
HttpClientInMemoryWebApiModule.forRoot(DataInmemService, {
apiBase: 'myapi/v2'
})