2

Angular 文档之后,HttpClient被注入到app组件中。我在另一个指南上看到这是一个“有利的”,没有解释。

@Component(...)
export class MyComponent implements OnInit {

  results: string[];

  // Inject HttpClient into your component or service.
  constructor(private http: HttpClient) {}

  ngOnInit(): void {
    // Make the HTTP request:
    this.http.get('/api/items').subscribe(data => {
      // Read the result field from the JSON response.
      this.results = data['results'];
    });
  }
}

对此我有一些疑问:

1) Where/How is the HttpClient actually instantiated?  Does `ng serve` handle this?
2) How could I inject a different instance if I needed to?
4

3 回答 3

3

ng 4.3+ 中引入的 HttpClient/HttpClientModule 是 Http/HttpModule 的重新实现。举一个示例功能,而不是将您的 GET 结果映射到 JSON,然后挖掘可能存在或可能不存在的属性,您现在可以将返回的结果转换为控制结果/错误的用户定义界面。举个例子,在你更新你的 cli 和 npm 之后,创建一个像图片中那样的项目,然后在你的浏览器中查看标题!看,在你的界面中,你可以选择你想要映射回来的东西。

在此处输入图像描述

于 2017-10-19T20:11:14.087 回答
2

实际上,HttpClient 是 Http 的改进替代品。他们希望在 Angular 5 中弃用 Http 并在以后的版本中将其删除。

或者你想知道为什么注射它是“有利的”?你注入服务。这就是服务在 Angular 中的工作方式。

与 Http 服务一样,HttpClient 服务在导入 Http 的模块加载时被实例化。

预计该服务只有一个实例。我不知道你为什么想要不止一个?

于 2017-10-19T19:05:11.953 回答
2

当你想使用一个服务(它基本上是一个 TS 类)时,你需要先实例化它。这就是角喷射器自动为您做的事情。

这种方法是“有利的”,因为它会自动查找在其构造函数中定义的服务依赖项。

不确定第二个问题 - 如果你想注入同一个类(服务)的另一个实例,你必须手动完成。

有关角度依赖注入的更多信息可以在他们的文档中找到:

https://angular.io/guide/dependency-injection

于 2017-10-19T19:05:31.923 回答