2017-02-13 10 views
3

私はレシピ用のAPIからデータを取得していますが、既にうまく機能しているレシピのリストを持っていますが、今は単一のレシピの詳細を呼び出すようになりました(1オブジェクト )。以下の私のコンソールログは、JSONの外観です。私がフロントエンドに表示することができないものがあれば、できる限り手伝ってください。単一配列のJSONオブジェクトは印刷されません(Ionic 2)

JSON

活字体

details: any; 

loadDetails() { 
    if (this.details) { 
    return Promise.resolve(this.details); 
    } 

    return new Promise(resolve => { 
    this.http.get('http://api.yummly.com/v1/api/recipe/Crustless-Ham-Savory-Bake-2005439?_app_id=//////&_app_key=/////') 
     .map(res => res.json()) 
     .subscribe(data => { 
     console.log(data); 
     this.details = data; 
     resolve(this.details); 
     }); 
    }); 
} 

HTML

<ion-content> 
    <ion-list> 
     <ion-item> 
      <h1>{{details.id}}</h1> 
     </ion-item> 
    </ion-list> 
</ion-content> 

Pagename.ts

@Component({ 
    selector: 'page-details', 
    templateUrl: 'details.html', 
    providers: [ApiAuthentication] 

}) 
export class DetailsPage { 

    public api: any; 

    constructor(public navCtrl: NavController, public navParams: NavParams, public apiAuthentication: ApiAuthentication) { 
    this.loadRecipes(); 
    } 

    ionViewDidLoad() { 
    console.log('ionViewDidLoad DetailsPage'); 
    } 

    loadRecipes(){ 
    this.apiAuthentication.loadDetails() 
    .then(data => { 
     this.api = data; 
    }); 
    } 
} 
+1

返されるオブジェクトのどこにでも説明は表示されません。 IDが印刷されているかどうかを確認するためにIDを表示するにはキーが必要です –

+0

@AniruddhaDas IDに変更したことを申し訳ありません(他の値を混乱させていました) * – BA1995

+0

@ BA1995。これは古典的なasync値のケースです:あなたのテンプレートは 'details.id'にアクセスしようとします** **' details'は実際に定義されています(非同期のコールドの結果であるためすぐに割り当てられません)。あなたのテンプレートで '{{details?.id}}'を試してください。 – AngularChef

答えて

2

は、あなたが実際にapiであなたのオブジェクトを持っているとき

<h1>{{details.id}}</h1> 

を表示しようとしている

<h1>{{api.id}}</h1> 

ここにセーフナビゲーションオペレータを追加してください。 {{api?.id}}

+0

すばらしい!私は気付かなかった?'を使ってエラーを得ることができます – BA1995

+1

セーフナビゲーションオペレータはnull値を保護しています。詳しくはhttps://angular.io/docs/ts/latest/guide/template-syntax.html#!#safe-navigation- operator私たちは常にasyncを扱っているので、このA LOTをAngularで使用することに慣れていきます:) – Alex

0

あなたは、実際に多くの事をしようとしているとのいずれかで行うことができます泣き言

あなたはpromiseとobservableの両方を使用しており、そのうちの1つを避けることができます。私はそれがデフォルトで来るのでobservableと言うでしょう。

loadDetails() { 
    if (this.details) { 
    return null; 
    } 

    this.http.get('http://api.yummly.com/v1/api/recipe/Crustless-Ham-Savory-Bake-2005439?_app_id=//////&_app_key=/////') 
     //.map(res => res.json()) // you don't need this 
     .subscribe(data => { 
     console.log(data); // make sure the data is the object you are expecting and have the id property 
     this.details = data; // not necessary if you will use async pipe 
     }); 
    }); 
} 

ここに詳細があります。そう、これはおそらく、あなたのテンプレートビットを変えてクリアしてください

loadRecipes(){ 
    this.apiAuthentication.loadDetails() 
    .then(data => { 
     this.api = data; // you store it in api! 
    }); 

+0

こんにちは、この関数を呼び出すコードを追加するように私の質問を編集しました.jsonをオブジェクトに変換するには '.map(res => res.json())'も必要です – BA1995

関連する問題