You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular v14/v15中providedIn除'root'外还有其他有效选项吗?

Angular providedIn 属性有效值及相关疑问解答

核心问题:providedIn 除了 'root' 还有其他可用选项吗?

在 Angular v14/v15 弃用 providedIn: 'any' 和 providedIn: NgModule 后,providedIn 仍有以下有效值:

  • 'root':根注入器级别单例,服务会被注入到根注入器,整个应用共享一个实例,支持摇树优化。
  • 'platform':平台级别的单例,适用于同一页面存在多个 Angular 应用的场景,所有应用共享同一个服务实例,同样支持摇树优化。
  • 具体注入令牌/服务类:可以指定另一个服务或自定义注入令牌作为提供范围,比如 providedIn: UserService,此时当前服务会成为目标令牌的依赖,只有当目标令牌被注入时才会被实例化,也支持摇树优化。

额外疑问:providedIn 属性是否会消失?未来默认行为如何?

目前 Angular 官方没有移除 providedIn 属性的计划,因为它仍承担着不同范围服务提供的核心功能(比如平台级别单例、令牌关联提供等)。未来也不会强制所有服务默认使用 providedIn: 'root',不同场景仍需要不同的提供策略,比如跨应用共享的服务就需要指定 'platform'。

相关疑问:懒加载模块中通过 NgModule.providers 提供的服务是否会被懒加载?

这个推测是正确的:如果服务在懒加载模块的 NgModule.providers 中声明,该服务会随懒加载模块一起被延迟加载,只有当模块被路由触发加载时,服务才会被实例化。不过需要注意,这类服务不支持摇树优化——Angular 无法提前判断该懒加载模块是否会被使用,因此不会将未使用的这类服务从打包产物中移除。

内容的提问来源于stack exchange,提问作者Jim Cooper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 15:03:25