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

Angular 2: Where is url 'api/heroes' defined?

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

应用程序如何知道 WebAPI url 是 api/heroes?我没有在 app-routing.module.ts 中看到这个定义。 url 映射到 InMemoryWebApiModule 是如何工作的?

我在这里继续我的经验......不深入了解 InMemoryWebApiModule......

"api" 似乎被 InMemoryWebApi 捕获。 "heroes" 是 createDb() 方法中定义的数据结构。

例如,我的是这样的:

private baseUrl = 'api/products';

我的数据文件如下所示:

export class ProductData implements InMemoryDbService, InMemoryBackendConfig {
    createDb() {
        let products: IProduct[] = [ ...];
        return { products };
    }
}

在页面顶部附近,他们为此定义了该教程的导入。

--删除了题外代码参考,我有点看错了问题。--

然后,他们在下方为我们提供了所述项目的代码。

InMemoryWebAPI 使用 https://github.com/angular/in-memory-web-api 创建一个本地数据库,对它的调用将引用。该模块似乎是 capturing/registering /api 调用的项目。

这只是使用实际后端的替代方法。

InMemoryWebApi 是一个自以为是的工具 - 它使用其内部约定。

createDb 方法应该 return 一个对象,其中的键(即您附加数据的位置)将与您的 api URL 的 slug 相匹配, 所以为了处理 heroes, return { heroes: yourData } 的 slug。通常,在这种情况下使用 shorthand:

const heroes = [ /* your data */ ];
return { heroes }; 

现在,api 是该库采用的默认前缀。它可以根据您的具体情况进行更改,只需将其作为 InMemoryBackendConfigArgs 参数的一部分提供即可。例如,如果您知道英雄的端点将位于 myapi/v2/heroes,请使用以下配置:

HttpClientInMemoryWebApiModule.forRoot(DataInmemService, {
  apiBase: 'myapi/v2'
})