首页 > 解决方案 > 角度 6 依赖注入

问题描述

在 Angular 6 的最新版本中,使用providedIn服务元数据中的属性在模块中注册服务:

@Injectable({
  providedIn: 'root',
})
export class HeroService {}

然而,文档仍然提到providers在模块元数据中的模块数组中注册服务,就像我们在 Angular 5 中所做的那样:

@NgModule({
  providers: [HeroService],
})
export class AppModule {}

所以,

标签: javascriptangulartypescriptangular-cliangular6

解决方案


基本上你可以使用任何一个,但根据新的 CLIprovideIn将在创建时自动添加service

#providedIn

现在有一种新的推荐方法来直接在@Injectable()装饰器中注册提供者,使用新的 providedIn 属性。它接受'root'作为应用程序的值或任何模块。当你使用 时'root',你的可注入将在应用程序中注册为单例,你不需要将它添加到根模块的提供者中。同样,如果您使用providedIn: UsersModule,则可注入对象将注册为 的提供者,而 UsersModule无需将其添加到模块的提供者中。

引入了这种新方法以在应用程序中进行更好的 tree-shaking。目前,添加到模块提供者的服务最终会出现在最终捆绑包中,即使它没有在应用程序中使用,这有点令人遗憾。

有关更多信息,请参阅此处


推荐阅读