Angular 2 嵌套注入

Angular 2 nested injection

我正在为 angular2 的依赖注入而苦苦挣扎。在我的示例中,我有两个服务。

我必须在我的组件中提供 Service2

@Component({
  providers: [Service1, Service2]
})

但是为什么呢?我在Service1中注入了Service2。当我的组件中没有对 Service2 的引用时,为什么我必须在我的组件中提供 Service2?

我知道,我可以在我的 bootsrap 函数中提供服务,但我想为我的组件提供我的服务...

bootstrap(AppComponent, [... Service1, Service2])

这是我的示例代码,由于缺少提供程序而无法正常工作

component.ts

import {Service1} from "service1.ts";    

@Component({
  providers: [Service1]
})
export class Component{
  constructor(private s: Service1) {
    //get data from Service1
  }
}

service1.ts

import {Service2} from "service2.ts";

@Injectable()
export class service1{
  constructor(private s2: Service2) {
    //get data from service2
    //edit data
    //return data
  }
}

service2.ts

@Injectable()
export class service2{
  constructor() {
    //return data
  }
}

Angular 需要知道在哪里可以找到服务。这就是 providers 数组(在组件中或在 bootstrap 调用中)的用途。您可以将其视为分层注册表。如果要注入服务,则需要将它们提供给注册表。

在 Angular1 中,服务是通过调用 factory 函数或类似函数在注册表中注册的。这里逻辑不同。

总而言之,即使组件没有直接绑定到服务,它也必须注册它,以便 Angular 意识到它的存在。