Angular 在模块上定义的服务能否注入在同一模块声明的组件上定义的服务
模块“my”上定义的服务能否注入模块“my”声明的组件上定义的服务 我已经测试过了,似乎是这样,所以这个问题主要是为了确认。因此,我有一个组件定义了Angular 在模块上定义的服务能否注入在同一模块声明的组件上定义的服务,angular,angular2-di,Angular,Angular2 Di,模块“my”上定义的服务能否注入模块“my”声明的组件上定义的服务 我已经测试过了,似乎是这样,所以这个问题主要是为了确认。因此,我有一个组件定义了ComboFeatureService: @Component({ selector: 'combo-feature', providers: [ComboFeatureService], template: '<div>I am feature</div>' }) export class Combo
ComboFeatureService
:
@Component({
selector: 'combo-feature',
providers: [ComboFeatureService],
template: '<div>I am feature</div>'
})
export class ComboFeature {
constructor(comboService: ComboService) {
comboService.report();
}
}
@Injectable()
export class ComboService {
constructor(public comboFeature: ComboFeatureService) {
}
组件和服务都定义在相同的模块上:
@NgModule({
providers: [ComboService],
declarations: [ComboFeature],
exports: [ComboFeature]
})
export class ComboModule {
我的理解是否正确,即使它们都定义在同一个模块上,ComboService
也无法访问ComboFeatureService
如果是这种情况,那么据我所知,组件注入器不是根注入器的子组件,对吗?服务是否定义在同一个模块上并不重要(除非这是延迟加载的模块),模块
提供程序属于根注入器
为此,应在当前喷油器上定义两个供应器:
@Component({
...
providers: [ComboService, ComboFeatureService]
})
export class ComboFeature {
constructor(comboService: ComboService) { ... }
或者,ComboFeatureService
可以作为可选注入,这将允许ComboService
从当前注入器使用ComboFeatureService
(如果没有,则不使用):
不管服务是否定义在同一个模块上(除非这是延迟加载的模块),模块提供程序属于根注入器
为此,应在当前喷油器上定义两个供应器:
@Component({
...
providers: [ComboService, ComboFeatureService]
})
export class ComboFeature {
constructor(comboService: ComboService) { ... }
或者,ComboFeatureService
可以作为可选注入,这将允许ComboService
从当前注入器使用ComboFeatureService
(如果没有,则不使用):
提供程序从需要它们的组件中查找。如果未找到提供程序,则在父级继续搜索,直到到达根注入器(添加到非延迟加载模块的@NgModule(…)
的提供程序)
这意味着您在模块上提供的服务无法注入组件提供的服务,因为它需要从根注入器向叶进行搜索,这是不会发生的。只有另一种方法可行。依赖项需要在相同或更高级别上提供。提供程序从需要它们的组件中查找。如果未找到提供程序,则在父级继续搜索,直到到达根注入器(添加到非延迟加载模块的@NgModule(…)
的提供程序)
这意味着您在模块上提供的服务无法注入组件提供的服务,因为它需要从根注入器向叶进行搜索,这是不会发生的。只有另一种方法可行。依赖关系需要在相同或更高级别上提供