1

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

  • Service1 注入 Service2 并从中获取数据。
  • 一个组件注入 Service1 并从 Service1 获取数据

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

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

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

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

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

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

组件.ts

import {Service1} from "service1.ts";    

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

服务1.ts

import {Service2} from "service2.ts";

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

服务2.ts

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

1 回答 1

1

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

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

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

于 2016-07-13T20:44:01.143 回答