混淆角度2中注册服务的用法和地点

时间:2016-10-26 23:29:36

标签: angular

所有

Angular2的第一天,当我在第6部分遵循其官方指导:在应用程序周围路由

https://angular.io/docs/ts/latest/tutorial/toh-pt5.html

Create AppComponent部分下,它说:

  • 将HeroService添加到AppModule的providers数组中,因为我们会这样做 在其他所有观点中都需要它。
  • 从中删除HeroService HeroesComponent提供者数组,因为它已被提升。

我认为Add HeroService to the providers array of AppModule的原因是在没有导入的情况下使用它/在每个组件中一遍又一遍地声明它,但是当我打开heroes.component.ts示例文件时,它仍然导入该服务:

import { HeroService } from './hero.service';

这让我很困惑,如果我们仍然需要在每个需要它的文件中导入HeroService,那么在AppModule的提供者元字段中注册服务有什么意义呢?

1 个答案:

答案 0 :(得分:2)

providers条目适用于Angular 2的依赖注入基础结构,import适用于TypeScript类型。

在组件中使用服务时,依赖注入基础结构将使用NgModule中的提供程序信息创建实例。但是,对于静态类型检查,仍然需要TypeScript import,在某些情况下,类型本身是标识DI提供程序的内容。如果服务是使用非实际类型提供的 - 例如OpaqueToken - 并且在注入时被声明为any,那么您将不需要import