gpt4 book ai didi

angular - 关于angular2提供者的一些问题

转载 作者:太空狗 更新时间:2023-10-29 18:35:00 24 4
gpt4 key购买 nike

抱歉,我是编程新手,没有 friend 知道这个话题,所以我要用我愚蠢的问题淹没 stackoverflow。

我可以在引导级别设置提供者

bootstrap(AppComponent, [Service]);

在根组件中

@Component({
providers: [Service],
//...

或在子组件级别。

这次的问题:

  1. 我会简化,但是如果 someService 设置为 someComponent 的提供者,是否意味着 someComponent 具有 someService 的字段和方法?提供商提供服务的方法和字段以供组件实例化新实例?
  2. 已删除
  3. 如果我提供服务,它的方法可以以某种方式在较低级别调用?
  4. 如果 someComponent 注入(inject)了 someService,其中注入(inject)了 someService2,我是否需要在 someComponent 级别上将它们 [someService, someService2] 都设置为提供者?如果我已经在上层组件中注入(inject)了 someService2 或/和?
  5. 为什么在引导级别设置 HTTP_PROVIDERS?

最佳答案

3.

依赖注入(inject)是分层的

bootstrap()
|-app-component
|-sub-component1
|-sub-component2
|-sub-sub-component21

当 Angulars DI 实例化组件或服务时,它会检查构造函数期望的参数并尝试查找匹配的提供者。

sub-sub-component被创建并且它有一个像constructor(myService: MyService)这样的构造函数,DI从sub-sub-components开始寻找如果找到匹配的提供者,向上提供者。如果它到达 `bootstrap() 并且仍然没有找到一个它失败并显示一条错误消息。

对于层次结构中的每一层,只创建一个提供者实例。当MyServicebootstrap() 中注册为提供商,然后是任何请求 MyService 的组件, 将在 bootstrap() 中创建的同一实例中传递.

MyService sub-component2中注册, 然后当 sub-sub-component请求 MyService它将从sub-component2中得到一个因为这是它找到的第一个。当sub-component1还要求 MyService DI 将返回 bootstrap() 之一因为向上的层次结构没有其他提供 MyService .

如果您想与整个应用程序共享一些数据,只需在 bootstrap() 注册您要使用的服务以共享数据。 .

1.

如果一个组件('子组件')有一个像这样的构造函数

export class SubComponent {
constructor(private myService: MyService) {
}

someName: string;

clickHandler($event) {
this.myService.clickHappended = true;
this.someName = this.myService.loadNameFromServer();
}
}

然后是对 MyService 的引用分配给 myService和代码 SubComponent会读写MyServices s 字段并调用其方法。

4. And if someComponent inject someService, in which injected someService2, do I need to set as provider both of them [someService, someService2] on level of someComponent? And if I already inject someService2 somewere or/and in upper-level-component?

Angular 在创建组件类或服务类时,会使用 DI。它查找所请求类型的提供者并创建一个实例或使用现有实例。当 DI 创建实例时,它会检查该类型的构造函数并再次查找这些类型的提供者。这在任意级别递归,(即使在 DI 需要一些帮助的循环中)

所以,简短的回答:是的。 DI 注入(inject)的所有内容都需要注册提供者。

5. Why HTTP_PROVIDERS set's up in bootstrap-level?

类由 HTTP_PROVIDERS 提供可以被整个应用程序重用。不需要为每个 HTTP 请求创建一个新实例,也不需要每个组件或服务都有自己的 Http 实例。类(class)。如果您希望特定组件使用不同的 Http类,您可以添加特定的 Http类到该组件的提供者列表。此组件及其所有子组件将改用此提供程序。

export class MySpecialHttp {
}

@Component(selector: 'sub-sub',
providers: [provide(Http, {useClass: MySpecialHttp})]
export class SubSubComponent {
constructor(http: Http) {}
}

这里我们指示 DI,当 SubSubComponent或其子组件请求之一 Http , 传入 MySpecialHttp反而。

关于angular - 关于angular2提供者的一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34965586/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com