2017-07-17 6 views
3

は、私がDBからコンテンツをロード持ち、成功したコンソール上に印刷されたが、私はビューと結合することはできません、それはError app.htmlなぜshowは未定義のプロパティを読み取ることができませんか?私のイオン-アンギュラアプリケーションで

<ion-card-content> 
    {{homeContent.about}} 
    </ion-card-content> 

component.tsを語ります

constructor(public navCtrl: NavController, navParams: NavParams, public 
    homeService: HomeContentService, 
    public loadingCtrl: LoadingController) { 
this.homeService.geteventHomeContentForPage(this.event.id).subscribe(data=> 
{ 
    this.homeContent=data; 

    console.log(this.homeContent) 
    console.log(this.homeContent.about) 

}) 
} 

マイコンソールOutput console

+0

'console.log(this.homeContent)'の出力を表示できますか? –

+0

は 'homeContent:any'だけでなく' homeContent:any = {} 'として' homeContent'を初期化していますか? – Dhyey

答えて

5

proble mは、homeContentプロパティが非同期に読み込まれるため、Angularがビューをレンダリングしようとすると、homeContentはまだ定義されていないため、aboutプロパティにアクセスしようとするとエラーがスローされます。 homeContentはまだnull/undefined


防ぐために、いくつかの他の方法である場合、これはaboutプロパティを読み取ろうとしない角度教えてくれる

<ion-card-content> 
    {{ homeContent?.about }} 
    </ion-card-content> 

:この問題を解決するには、エルビス演算子を使用これは、次のようにngIfの小切手を追加することです:

<ion-card-content *ngIf="homeContent"> 
    {{ homeContent.about }} 
    </ion-card-content> 

homeContentプロパティが定義されていない場合、ion-card-content全体がレンダリングされないため、この場合、elvis演算子(?)は必要ありません。

このエラーを回避する別の可能な方法、オブジェクトとしてhomeContentプロパティを初期化することですので、そのaboutサブプロパティにアクセスしようとすると、それはnullになりますが、角度がエラーをスローしません。

public homeContent: any = {}; 
+0

良い答え。ライフサイクルフックでも解決できますか? –

+2

@FromZeroToHero私はそうは考えていません。observablesは非同期です。コンストラクタに設定してもビューがロードされた後にデータが受信される可能性があります。 –

+1

ありがとうございました!多くの方に道を使い始めて、ここには* ngIfを使用する大きな理由があります – StefanBob

関連する問題