bugfix> angular > 投稿

コメントアウトされたdataArrayを使用すると、必要なデータが正常に取得されました。

ただし、 this.http.get() から返されたdataArrayを使用するとエラーが表示されます 。

データ配列に適切にアクセスするにはどうすればよいですか?

// var dataArray = [{ id: 15, name: "111" }, { id: 13, name: "abc" }];
var dataArray = this.http.get(apiURL).subscribe(response => response.text());
const userID = this.route.snapshot.paramMap('id');
var user = dataArray.find(x => x.id === userID);
this.userForm.patchValue(user);

回答 1 件
  • .subscribe  を返します定期購読 使用する実際のデータではありません。返されるデータを使用するには、コールバック内で .subscribe を操作する必要があります 。非同期呼び出しから応答を返す方法を参照してください。 JavaScriptでのコード同期のより詳細な説明については。

    通常、TypeScriptエラーが役立ちます。この場合、それはタイプ Subscription を告げています  メソッド .find がありません 。これは本当です...そしてその理由は dataArray ということです  は Subscription です  ( .subscribe の呼び出しから返された )と期待どおりの配列ではありません。

    応答から返された配列を使用する場合は、 .subscribe 内でアクセスする必要があります :

    this.http.get(this.apiURL).pipe(
      map(response => response.text()),
    ).subscribe(dataArray => {
      this.userForm.patchValue(dataArray.find(
        user => user.id === this.route.snapshot.paramMap.get('id'),
      ));
    });
    
    

    また、すべてのユーザーを patchValue に取得する必要があるとは思わない 。理想的には、 this.http.get(`/users/${userId}`) のようなことができます   .find をスキップします 。

あなたの答え