【问题标题】:http.get doesn't seem to be executing [duplicate]http.get 似乎没有执行[重复]
【发布时间】:2018-01-24 15:27:03
【问题描述】:

第一个运行 Angular 5 的 Angular 应用。

我正在对我的 Web 服务器运行 http get。代码如下:

  loadSettings() {
    console.log("loadSettings() from:" + this.pizzaSettingsUrl);
    this.http.get<string[]>(this.pizzaSettingsUrl, {headers: this.headers})
      .pipe(
        tap(settings => this.processSettingsDictionary(settings)),
        catchError(this.handleError("pizzaSettings", {}))
      );
  }

  processSettingsDictionary(settings) {
    console.log("processSettingsDictionary()");
    console.log(JSON.stringify(settings));
    this.drinks = settings.drinkType;
    this.drinkSizes = settings.drinkSize;
    this.pizzaSizes = settings.pizzaSize;
    this.breads = settings.sandwichBreadType;
    this.sides = settings.sideType;
    this.toppings = settings.topping;
  }

日志“loadSettings() from:”正在使用正确的 url 运行。当我将 URl 从控制台复制并粘贴到 curl 并运行它时,它会访问我的网络服务器。

但是,this.http.get 没有访问我的服务器,并且我在日志中没有收到任何错误。我的网络选项卡上也没有任何内容表明发生了任何事情。

你能看出我做错了什么吗?

【问题讨论】:

  • 这是一个明确的重复...

标签: angular http http-get


【解决方案1】:

HttpClient 仅在您订阅时运行。

 this.http.get<string[]>(this.pizzaSettingsUrl, {headers: this.headers}).subscribe();

【讨论】:

  • 虽然这是正确的,但我可以补充一点,如果您将数据绑定到使用async 管道的模板,则不需要.subscribe(),因为它会自动订阅和取消订阅你。
  • 天哪!感谢您的帮助。
【解决方案2】:

在订阅之前,Observable 不会发出。通常,您将订阅任何代码调用loadSettings。例如:

// Service code
loadSettings() {
  return this.http.get<string[]>(this.pizzaSettingsUrl, {headers: this.headers})
  .pipe(
    catchError(this.handleError("pizzaSettings", {}))
  );
}

// Component code
this.pizzaService.loadSettings().subscribe(({ drink, pizzaSlices, etc }) => {
  this.drink = drink;
  this.pizzaSlices = pizzaSlices;
  this.etc = etc;
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-19
    • 1970-01-01
    相关资源
    最近更新 更多