混淆angular 2中服务的用法和注册位置
全部: 在Angular2的第一天,我在第6部分:应用程序的路由中学习了它的官方教程 在混淆angular 2中服务的用法和注册位置,angular,Angular,全部: 在Angular2的第一天,我在第6部分:应用程序的路由中学习了它的官方教程 在Create-AppComponentpart下,显示: 将HeroService添加到AppModule的providers数组,因为我们将 在任何其他视图中都需要它 从中删除HeroService HeroesComponent providers数组,因为它已升级 我认为将HeroService添加到AppModule的providers数组中的原因是使用它,而无需在每个组件中反复导入/声明它,但
Create-AppComponent
part下,显示:
- 将HeroService添加到AppModule的providers数组,因为我们将 在任何其他视图中都需要它李>
- 从中删除HeroService HeroesComponent providers数组,因为它已升级
heroes.component.ts
示例文件时,它仍然导入该服务:
import { HeroService } from './hero.service';
这让我很困惑,如果我们仍然需要在每个需要服务的文件中导入HeroService,那么在AppModule的providers元字段中注册服务有什么意义?providers条目用于Angular 2的依赖项注入基础结构,
import
用于TypeScript类型
当您在组件中使用服务时,依赖项注入基础设施将使用
NgModule
中的提供者信息创建实例。但是,对于静态类型检查,仍然需要TypeScriptimport
,在某些情况下,类型本身就是识别DI提供者的对象。如果服务是使用实际类型以外的内容提供的,例如OpaqueToken
,并在注入时声明为any
,您不需要导入,提供程序
项用于Angular 2的依赖项注入基础结构,导入项用于类型脚本类型
当您在组件中使用服务时,依赖项注入基础设施将使用
NgModule
中的提供者信息创建实例。但是,对于静态类型检查,仍然需要TypeScriptimport
,在某些情况下,类型本身就是识别DI提供者的对象。如果服务是使用实际类型以外的其他类型提供的(例如,OpaqueToken
),并且在注入的位置声明为any
,您将不需要导入
谢谢,另一个问题是:如果我在AppModule和HeroesComponent中注册该HeroService,会发生什么,当调用HeroesComponent时,我想知道注入的实例应该来自哪个实例?应该是从封闭的层面吗?我不太确定NgModule
是在发行周期的后期推出的,我与它的提供商的互动经验有限。我猜它会使用组件的提供者
中声明的服务,但这只是一个猜测。@Kuan当您将其添加到@component.providers
时,服务的范围仅限于其组件和子组件,这意味着每次创建组件时,都会为该组件创建一个新的服务。在@NgModule.providers
中,服务是应用程序范围的,这意味着整个应用程序库只有一个实例,另一个问题是:如果我在AppModule和HeroesComponent中注册该HeroService,会发生什么情况,当调用HeroesComponent时,我想知道注入的实例应该来自哪个实例?应该是从封闭的层面吗?我不太确定NgModule
是在发行周期的后期推出的,我与它的提供商的互动经验有限。我猜它会使用组件的提供者
中声明的服务,但这只是一个猜测。@Kuan当您将其添加到@component.providers
时,服务的范围仅限于其组件和子组件,这意味着每次创建组件时,都会为该组件创建一个新的服务。在@NgModule.providers
中,服务是应用程序范围的,这意味着整个应用程序只有一个实例