2016-04-26 12 views
0

サーバーからデータを取得してテンプレートに表示する必要がある単純なIonic2ページがあります。httpコール後にAngular2/Ionic2で更新されないビュー

アプリケーションを実行すると、コンソールにフェッチされたデータがすべて表示されます(console.log(res.Data);)。

残念ながら、ビューは更新されません。しかし、私がボタンを押すと、すべてが魅力のように機能します。

またngOnInitメソッドからthis.update()を呼び出す必要があります。私がここで間違っていることは何ですか?

コード

constructor(private timeline: TimelineService) { 
    this.update(); 
} 

update() { 

    this.timeline.getTimeline(1).subscribe(res => { 
    console.log(res.Data); 
    this.timelineData = res.Data; 
    }); 

} 

テンプレート

<pre> 
    {{ timelineData?.length }} 
</pre> 

<button (click)="update()">Update</button> 

<div *ngFor="#timelineItem of timelineData; #i = index"> 
    <timeline-item [data]="timelineItem"></timeline-item> 
</div> 

+0

あなたは 'ngOnInit'ライフサイクルフックからupdate関数を呼び出そうとしましたか?ngOnInit(){this.update(); } '? –

+0

タイムラインアイテムコンポーネントに問題がある可能性があります。そのコンポーネントを呼び出す代わりにngForの中で{{timelineItem}}を実行するだけの場合 –

+0

timeline-item-componentを使ってやることがあるようです。これを取り除き、何が間違っているかを見てみましょう。ありがとう! –

答えて

0

私はあなたのテンプレートで問題を見ることができます。データは非同期にロードされるため、lengthプロパティを表示しようとすると問題が発生するはずです。

あなたはこのレベルでエルビス演算子を試みることができる:

<pre> 
    {{ timelineData?.length }} 
</pre> 
+0

提案していただきありがとうございます!残念ながら、これは私の問題を解決しませんでした。 –

+0

コンポーネントの定義方法を教えてください。私はあなたが '@ Component'に持っているものを意味します... –

+0

これは' Component'ではなく 'Ionic2からの' Page'です。たぶん私はすべてをコンポーネントに入れる必要があります。ハングオン:) –

0

を私は()onPageLoaded下の周りに同様の仕事と呼び出しサービスを持っている魔法のように動作します。これを試しましたか?

constructor(private timeline: TimelineService) { 
} 
onPageLoaded(){ 
this.update(); 
} 
update() { 
    this.timeline.getTimeline(1).subscribe(res => { 
    console.log(res.Data); 
    this.timelineData = res.Data; 
    }); 
} 
関連する問題