Angular 2 嵌套注入
Angular 2 nested injection
我正在为 angular2 的依赖注入而苦苦挣扎。在我的示例中,我有两个服务。
- Service1 注入 Service2 并从中获取数据。
- 组件注入 Service1 并从 Service1 获取数据
我必须在我的组件中提供 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 意识到它的存在。
我正在为 angular2 的依赖注入而苦苦挣扎。在我的示例中,我有两个服务。
- Service1 注入 Service2 并从中获取数据。
- 组件注入 Service1 并从 Service1 获取数据
我必须在我的组件中提供 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 意识到它的存在。