Angular 2:url'api / heroes'在哪里定义?

时间:2017-08-16 20:55:14

标签: angular angular2-routing

我正在阅读Angular 2 Tour of Heroes教程的第7部分。包含InMemoryWebApiModule后,hero.service.ts使用private heroesUrl = 'api/heroes';

该应用如何知道WebAPI网址为api/heroes?我没有在app-routing.module.ts中看到这个定义。如何映射到InMemoryWebApiModule的URL工作?

3 个答案:

答案 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'
})