私はangular.ioの例を見つけました。この例は、同じ種類のメソッドを持つ私のアプリに非常に似ています。この例ではPromisesを使用していますが、Observablesを使用しています。このサンプルを参考にしてみると、サービス内のgetHeroメソッドとHeroDetailComponentのngOnInitを除いて、すべてのメソッドがアプリケーションで動作しています。だから、私は構文に問題があるので、誰かが助けてこのメソッドを観察可能なものに変換できるかどうか疑問に思っています。HTTP:Angular 2 + TS HTTPでObservablesを使用する方法
//HeroService
public getHero(id: string) {
return this.getHeroes()
.subscribe(heroes => this.heroes.filter(hero => heroes.id === id)[0]); //BTW, what does this [0] mean??
}
EDIT:私は実際に直接リストを取得しなければならなかった、それはでは動作しませんでした。ここだから私はこのような何かをしたい、私が観察可能に変換する必要がコードとplunker
//HeroService
getHero(id: number) { // my id is String
return this.getHeroes()
.then(heroes => heroes.filter(hero => hero.id === id)[0]);
}
//HeroDetailComponent
ngOnInit() {
if (this.routeParams.get('id') !== null) {
let id = +this.routeParams.get('id');
this.navigated = true;
this.heroService.getHero(id)
.then(hero => this.hero = hero);
} else {
this.navigated = false;
this.hero = new Hero();
}
}
です以下の回答に示唆されているようにthis.heroesを返します。実例:
public getById(id: string) {
//return this.getHeroes() <---- didn't work
return this.http.get('someUrl') // WORKS!
.map(heroes => this.heroes.filter(hero => hero.id === id)[0]);
}
今、私はまだngOnitに問題があります。なぜ私は本当に理解できません!
ngOnInit(){
let id = this._routeParams.get('id');
this.heroService.getById(id)
//console.log("retrieved id: ",id) <----- gives correct id!
.subscribe(hero => this.hero = hero);
//console.log("hero: ", this.hero); <----- gives undefined!
}
EDIT2、私はあなたがあなたの答えにずっと1つのブラケットを持っていたと思う:(詳細ページに移動しようとしたときに、まだ未定義の取得、ブラケットの正しい場所を見て、取得しよう?
ngOnInit(){
let id = this._routeParams.get('id');
this.heroService.getById(id)
.subscribe(heroes => {
// this code is executed when the response from the server arrives
this.hero = hero
});
// code here is executed before code from the server arrives
// even though it is written below
}
THANKS! getHeroは魅力的に機能しますが、今ではngOnInitに(wierd?)エラーがあります。手伝ってくれますか?私の質問を更新しました! – Alex
答えを更新しました。 –
非常に良い説明、ありがとう!私は一般的にコーディングするのが初めてで、これがどこかに来たことを覚えています。これは、約束とオブザーバブルズの違いの1つです。しかし、私はそれを忘れてしまったと思います!私が移動している詳細ページがまだ未定義であると不平を言っているので、もう一度質問を更新しました!私はあなたが1つのブラケットをあまりにも多く持っていたと思う、または少なすぎる、私は彼らの適切な場所にブラケットを配置しようとしましたが、それはまだ間違っていると思いますか? – Alex