D280 最终版,尝试从 API 订阅数据(角度)

问题描述 投票:0回答:1

项目:互动世界地图 使用SVG地图文件获取国家名称 使用国家/地区名称进行 API 调用 使用 API 中的信息通过 API 中的信息更新文本框。

我正在遵循指南,但似乎需要能够调用Subject()方法/模块/类型/其他事物,但我没有这种类型,所以当我编译时失败。看图:

文件名:api.service.ts

`import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { __classPrivateFieldGet } from 'tslib';

@Injectable({
  providedIn: 'root'
})
export class ApiService {

  constructor(private http: HttpClient) { }

  fetchCountryInfo(country: string) {
    let api = "https://api.worldbank.org/v2/country/";
    api = api + country + "?format=JSON";
    console.log(api);
    return this.http.get(api)
  }
  setWeatherData(country: string) {
    let subject = new Subject();
  
  this.fetchCountryInfo(country).subscribe(data: any) => {
    subject.next({
      country: data.name
    })
  }
}
}

    `

文件名:map-world.component.ts

`    import { Component } from '@angular/core';
import { ApiService } from '../api.service';

@Component({
  selector: 'app-world-map',
  templateUrl: './world-map.component.html',
  styleUrl: './world-map.component.css'
})
export class WorldMapComponent {
constructor(private apiService: ApiService){}

  getInfo(event: any) {
    console.log(event.target.id);
    this.apiService.fetchCountryInfo(event.target.id).subscribe(data => {
      console.log(data)
    });
  }
}

`

我已经尝试如图所示进行构建。这会导致图像中出现错误。我预料到了这一点,但充满希望。

然后我尝试更新订阅功能内的“信息框”。预计这会更新文本框,但它不能,因为它似乎无法从订阅内部读取 DOM。

我尝试将 DOM 作为变量传递到订阅中。我没想到这会起作用,而且我可能没有做对。

我尝试将订阅返回到变量。我以为这会让我读取数据,但我认为我得到的只是永远不会得到跟进的数据的承诺。

我尝试将所述可观察量格式化为 JSON,但它只是变成了“safesubscription2”。我没想到这会起作用,但在寻求帮助之前我想尝试任何我能想到的事情。

angular typescript api dom subscription
1个回答
0
投票

修好了。这是答案。

    import { Subject} from 'rxjs';

只需要导入Subject();

© www.soinside.com 2019 - 2024. All rights reserved.