javascript - 角度 6 依赖注入
问题描述
在 Angular 6 的最新版本中,使用providedIn
服务元数据中的属性在模块中注册服务:
@Injectable({
providedIn: 'root',
})
export class HeroService {}
然而,文档仍然提到providers
在模块元数据中的模块数组中注册服务,就像我们在 Angular 5 中所做的那样:
@NgModule({
providers: [HeroService],
})
export class AppModule {}
所以,
- 应该使用哪种方法让注入器知道它应该注入的服务?
- 模块
providers
数组方法会被弃用吗?
解决方案
基本上你可以使用任何一个,但根据新的 CLIprovideIn
将在创建时自动添加service
#providedIn
现在有一种新的推荐方法来直接在
@Injectable()
装饰器中注册提供者,使用新的 providedIn 属性。它接受'root'
作为应用程序的值或任何模块。当你使用 时'root'
,你的可注入将在应用程序中注册为单例,你不需要将它添加到根模块的提供者中。同样,如果您使用providedIn: UsersModule
,则可注入对象将注册为 的提供者,而UsersModule
无需将其添加到模块的提供者中。引入了这种新方法以在应用程序中进行更好的 tree-shaking。目前,添加到模块提供者的服务最终会出现在最终捆绑包中,即使它没有在应用程序中使用,这有点令人遗憾。
有关更多信息,请参阅此处
推荐阅读
- node.js - 无法从节点 js 中的 S3 获取文件
- php - 如何在php中完全密码保护excel文件内容
- firebase - 在 React Native Expo 中显示对象数组
- decompiler - 我找不到合适的“旧”“ex4 到 mq4 反编译器”?
- php - 如何解决 Script php -r "copy('.env.example', '.env');" 处理以错误代码 1 返回的 post-root-package-install 事件
- java - 会话“应用程序”:未应用更改。添加或重命名资源需要重新启动应用程序
- flutter - 如何在 Flutter 中使用 ListViewBuilder 和切换按钮获取动态 JSON 数据?
- xslt - 使用 xsl:variable 设置另一个变量 使用 xsl:choose -> Invalid property
- css - Material-UI:删除 TimelineItem missingOppositeContent:before 元素
- python - RFID扫描仪之后不扫描