Angular中为何仅在app.module.ts的providers中声明CounterService而非UserService?
为什么只在
app.module.ts的providers里添加了一个服务? 嘿,这个问题其实和Angular的服务注入作用域直接相关,咱们结合你的代码来拆解清楚:
1. 先看两个服务的注册位置
- CounterService:你在
app.module.ts的providers数组里声明了它,这属于根层级注入——整个Angular应用中只会创建一个CounterService实例,所有依赖它的组件/服务都会共享这同一个实例。 - UserService:你并没有在根模块里注册它,而是在
AppComponent的@Component装饰器的providers数组里声明了。这意味着UserService是组件级别的服务:只有AppComponent及其子组件能够获取到这个服务的实例,而且每次AppComponent被创建时,都会生成一个全新的UserService实例。
2. 为什么不用把两个服务都加到根providers里?
Angular会根据服务的注册位置来管理实例的创建和注入:
- 你在
AppComponent里注册了UserService,Angular已经能够识别这个服务,并在需要的时候(比如AppComponent初始化时)创建它的实例,所以不需要再在根模块的providers里重复注册。 - 而
UserService的构造函数依赖CounterService,因为CounterService是根级注入的,Angular能在整个应用的注入器中找到它,顺利注入到UserService里,完全不影响功能。
额外提示(针对Angular 2)
如果后续你希望UserService在整个应用中共享同一个实例(比如其他组件也需要用它,且数据要统一),你可以把它移到app.module.ts的providers数组里;如果每个组件需要独立的UserService实例,保持在组件的providers里就没问题。
内容的提问来源于stack exchange,提问作者Jan van Bergen
相关产品推荐
相关产品推荐

