Angular 在模块上定义的服务能否注入在同一模块声明的组件上定义的服务

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

模块“my”上定义的服务能否注入模块“my”声明的组件上定义的服务

我已经测试过了,似乎是这样,所以这个问题主要是为了确认。因此,我有一个组件定义了
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(…)
的提供程序)

这意味着您在模块上提供的服务无法注入组件提供的服务,因为它需要从根注入器向叶进行搜索,这是不会发生的。只有另一种方法可行。依赖关系需要在相同或更高级别上提供