Http getリクエストで受け取ったオブジェクトのプロパティをAngularで表示する際に問題があります。私はngOnInit()メソッドでHTTPリクエストを呼び出そうとしていますが、うまくいくようです:必要なオブジェクトを受け取って戻します。しかし、その後、httpファイルに表示するのに苦労しています(プロパティは定義されていません)。 Observableをオブジェクトプロパティに接続することはできないようです。私は間違って何をしていますか?ngOnInit()メソッドでHttp get要求からオブジェクトを表示するには?
コンポーネント:
import { Component, OnInit } from '@angular/core';
import {Package} from "../shared/package";
import { Http} from "@angular/http";
import 'rxjs/Rx';
@Component({
selector: 'app-basket',
templateUrl: './basket.component.html',
styleUrls: ['./basket.component.css']
})
export class BasketComponent implements OnInit {
package: Package;
private baseUrl: string = 'https://basket-211b4.firebaseio.com/.json';
constructor(private http: Http) { }
ngOnInit() {
this.http.get(`${this.baseUrl}`).subscribe(
(result) =>{
this.package = result.json();
console.log(this.package);
}
)
}
HTTPファイル:
<li class="row totals">
<span class="price" >{{ package.id }}</span>
</li>
パッケージクラス:
import {User} from "./user";
import {Service} from "./service";
export class Package {
constructor(public id: number, public totalCost: number, public dateCreated: string, public user: User,
public services: Service[]){}
}
コンソールエラー:./BasketComponentクラスBasketComponentでエラーが発生しました - インラインテンプレート:31:29原因:未定義のプロパティ 'id'を読み取れません
012コンソールに表示オブジェクト:オブジェクト{dateCreated: "2017-05-14T18:47:56.000 + 0000"、ID:1、サービス:配列(3)にtotalCost:3600、ユーザー:オブジェクト}
HttpはAJAX要求を送信します。 AJAXの最初のAは*非同期*を意味します。したがって、コンポーネントが最初に表示されるときに、パッケージ項目にはまだ値が設定されません。後でHTTPレスポンスが返ってきて、subscribeに渡されたコールバック関数が実行されているときにのみ設定されます。 'package?.id'を使用してください。 * ngIfを使用すると、利用可能なパッケージのみが表示されます。 –