2

ボタンにアタッチされたメソッドがあります。ユーザーが自分の名前をインプットに入力し、ボタンをクリックすると、そのユーザーからの情報が表示されます。私がそれをどのように計画しているかを以下に説明します..

ある Observable から別の Observable に値を渡そうとしています。最初の Observable から取得しようとしている値は、2 番目の Observable 内で使用される ID です。

これを行う現在の方法は、switchMap オペレーターを使用することです。ただし、最初の Observable から 2 番目に ID を渡すと、コンソールに「未定義」と表示されます。

最初のObservableを呼び出すときにIDに正しくアクセスしていないか、switchMapを使用しないでください??

これも奇妙で、Object.keys(player)['0'] を使用すると最初のオブジェクト キー (データ) を取得できるので、近いと思いました。ただし、 Object.keys(player)['0'].id; を使用します。未定義です:/

これは、ID を取得しようとしている応答オブジェクトです。

イムグル

コンポーネント内のクリック機能:

click() {
  this.playerService.getPlayer(this.searchString).pipe(
      switchMap(player => {
        let ID = Object.keys(player)['0'];
        let anotherID = ID['0'].id;

        return this.playerService.getSeasonStats(anotherID);
      }))
    .subscribe(id => this.player = id)
}

getPlayer メソッドと getSeasonStats メソッドを使用したサービス:

getPlayer(query: string):Observable<Player> {
  let getHeaders = new HttpHeaders({'Authorization':'Bearer API_Key', 'Accept': 'application/vnd.api+json'}); 
  return this.http.get<Player>(`https://api.com/shards/steam/players?filter[playerNames]=${query}`, {
    observe:'body',
    responseType: 'json',
    headers: getHeaders
  });
}


getSeasonStats(id: string):Observable<SeasonStats[]> {
  let getHeaders = new HttpHeaders({'Authorization':'Bearer API_Key', 'Accept': 'application/vnd.api+json'}); 
  return this.http.get<SeasonStats[]>(`https://api.com/shards/steam/players/${id}/seasons/division.bro.official.pc-2018-04`,  {
    observe:'body',
    responseType: 'json',
    headers: getHeaders
  });
}
4

1 に答える 1