角に非常に新しい。私は似たような質問をしましたが、それは具体的な内容になってしまったり、解決策を理解できません。角2 - 未定義のプロパティ '...'を読み取ることができません
実際のエラー: "プロパティを読み取ることができません 'idPlanet' 未定義のObject.evalで(PlanetComponent.html:11)[updateRendererとして]"
問題: planetDetail.idPlanetがありますおそらく未定義ですか?
疑い: getPlanetDetail()
planet.component.html:
<div class="col-sm-9">
ID: {{ planetDetail.idPlanet }}
</div>
planet.component.ts:
import {
Component,
OnInit
} from '@angular/core';
import { Planet } from './planet';
import { PlanetService } from './planet.service';
@Component({
selector: 'planets',
templateUrl: './planet.component.html'
})
export class PlanetComponent implements OnInit {
private planets: Planet[];
private planetDetail: Planet;
constructor(
private planetService: PlanetService
) {}
public ngOnInit(): void {
this.getPlanetDetail();
this.getPlanets();
}
public getPlanets() {
this.planetService.getPlanets()
.subscribe(
(planets) => this.planets = planets
);
}
public getPlanetDetail() {
this.planetService.getPlanetDetail()
.subscribe(
(planets) => this.planetDetail = planets
);
}
}
planet.service.ts:
import { Injectable } from '@angular/core';
import { Headers, Http, Response } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
import { Planet } from './planet';
@Injectable()
export class PlanetService {
private planetsUrl = 'http://localhost/index.php/api/planet/'; // URL to web api
// Injecting the http client into the service
constructor(private http: Http) {}
public getPlanets(): Observable<Planet[]> {
return this.http.get(this.planetsUrl + 'planets/id_sol/1')
.map(this.parseData)
.catch(this.handleError);
}
public getPlanetDetail(): Observable<Planet> {
return this.http.get(this.planetsUrl + 'planet/id_planet/1')
.map(this.parseData)
.catch(this.handleError);
}
private parseData(res: Response) {
let body = res.json();
if (body instanceof Array) {
return body || [];
} else {
return body.post || {};
}
}
private handleError(error: any): Promise<any> {
console.error('An error occurred', error); // for demo purposes only
return Promise.reject(error.message || error);
}
}
私は駄目です。tbhです。getPlanetDetail()メソッドをgetPlanets()からビルドしようとしましたが、うまくいきました。私は約束を使うべきですか?
私はconsole.log()をデバッグする場所を正確に把握するのに苦労しています。私はGithubの角スターターキットを使用しています。
お時間をいただきありがとうございます。
編集1:API出力{「idPlanet」:「1」、「名前」:「地球」}
あなたは 'planetDetail'があることを確認している場合(非同期的に)ある時点で移入され、 'ID:{{planetDetail?.idPlane t}} ' – Phix
これをチェックしてください:'(planets)=> this.planetDetail = planets'。おそらく '惑星 'は未定義です。そのため、 'parseData'メソッドの中のコンソールは、あなたのhttp呼び出しの応答が何であるか見ることができます。 –
ええ、私はそこに何も置くべきなんて何も分からない。 – qwertzman