Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
混淆angular 2中服务的用法和注册位置_Angular - Fatal编程技术网

混淆angular 2中服务的用法和注册位置

混淆angular 2中服务的用法和注册位置,angular,Angular,全部: 在Angular2的第一天,我在第6部分:应用程序的路由中学习了它的官方教程 在Create-AppComponentpart下,显示: 将HeroService添加到AppModule的providers数组,因为我们将 在任何其他视图中都需要它 从中删除HeroService HeroesComponent providers数组,因为它已升级 我认为将HeroService添加到AppModule的providers数组中的原因是使用它,而无需在每个组件中反复导入/声明它,但

全部:

在Angular2的第一天,我在第6部分:应用程序的路由中学习了它的官方教程

Create-AppComponent
part下,显示:

  • 将HeroService添加到AppModule的providers数组,因为我们将 在任何其他视图中都需要它
  • 从中删除HeroService HeroesComponent providers数组,因为它已升级
我认为将HeroService添加到AppModule的providers数组中的原因是使用它,而无需在每个组件中反复导入/声明它,但当我打开
heroes.component.ts
示例文件时,它仍然导入该服务:

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

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

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


当您在组件中使用服务时,依赖项注入基础设施将使用
NgModule
中的提供者信息创建实例。但是,对于静态类型检查,仍然需要TypeScript
import
,在某些情况下,类型本身就是识别DI提供者的对象。如果服务是使用实际类型以外的内容提供的,例如
OpaqueToken
,并在注入时声明为
any
,您不需要导入

提供程序
项用于Angular 2的依赖项注入基础结构,导入项用于类型脚本类型


当您在组件中使用服务时,依赖项注入基础设施将使用
NgModule
中的提供者信息创建实例。但是,对于静态类型检查,仍然需要TypeScript
import
,在某些情况下,类型本身就是识别DI提供者的对象。如果服务是使用实际类型以外的其他类型提供的(例如,
OpaqueToken
),并且在注入的位置声明为
any
,您将不需要
导入

谢谢,另一个问题是:如果我在AppModule和HeroesComponent中注册该HeroService,会发生什么,当调用HeroesComponent时,我想知道注入的实例应该来自哪个实例?应该是从封闭的层面吗?我不太确定
NgModule
是在发行周期的后期推出的,我与它的
提供商的互动经验有限。我猜它会使用组件的
提供者
中声明的服务,但这只是一个猜测。@Kuan当您将其添加到
@component.providers
时,服务的范围仅限于其组件和子组件,这意味着每次创建组件时,都会为该组件创建一个新的服务。在
@NgModule.providers
中,服务是应用程序范围的,这意味着整个应用程序库只有一个实例,另一个问题是:如果我在AppModule和HeroesComponent中注册该HeroService,会发生什么情况,当调用HeroesComponent时,我想知道注入的实例应该来自哪个实例?应该是从封闭的层面吗?我不太确定
NgModule
是在发行周期的后期推出的,我与它的
提供商的互动经验有限。我猜它会使用组件的
提供者
中声明的服务,但这只是一个猜测。@Kuan当您将其添加到
@component.providers
时,服务的范围仅限于其组件和子组件,这意味着每次创建组件时,都会为该组件创建一个新的服务。在
@NgModule.providers
中,服务是应用程序范围的,这意味着整个应用程序只有一个实例