2016-08-13 5 views
0

私は今日この問題に取り組んでおり、私が間違っていることを理解できないようです。私はそれが私が見落としているシンプルなものだと確信していますが、どんな助けも大歓迎です。Httpレスポンスデータで* ngForの初期レンダリングに関する問題

ここに質問があります。 * ngForを使用してアプリケーションIDのリストをレンダリングする単純なコンポーネントがあります。このリストはWeb APIから取得されます。 httpリクエストが期待どおりに機能しているため、ネットワーク上で正しい応答が表示されます。

結果が返ってくると、コンポーネントのローカル変数に配列が割り当てられ、* ngForが変更を認識して画面を適切にペイントすると仮定します。

ブラウザのコンソールにクライアント側のエラーが表示されません。これはAngular 2 RC5です。多分

アプリケーションlist.component.html

<h3>Applications</h3> 
 
<ul> 
 
    <li *ngFor="let app of applications">{{ app.id }}</li> 
 
</ul>

アプリ-list.component.ts

import { Component, OnInit } from '@angular/core'; 
import { Application } from './application'; 
import { ApplicationService } from './application.service'; 

@Component({ 
    selector: 'sng-application-list', 
    template: require('./application-list.component.html'), 
    providers: [ ApplicationService ] 
}) 
export class ApplicationListComponent { 
    errorMessage: string; 
    applications: Application[] = []; 

    constructor(private applicationService: ApplicationService) { } 

    ngOnInit() { 
     this.getApplications(); 
    } 

    getApplications() { 
     this.applicationService.getApplications() 
      .subscribe(
       applications => { 
        this.applications = applications 
       }, 
       error => { 
        this.errorMessage = <any>error; 
       }); 
    } 
} 
+0

エラーはありませんか?私はあなたがアプリケーションをインポートしていないが、定義していることを確認します:アプリケーション:アプリケーション[] = []; –

+0

コピー貼り付けエラーです。 – Cobster

+0

'{{app?id}}'これを試してください。 inside * ngFor '{{applications | json}}'を試してみて、データを取得していますか? – micronyks

答えて

1

それはAngularZoneの問題。これを試してください。

import { Component, ChangeDetectorRef } from '@angular/core'; 

constructor(private applicationService: ApplicationService, 
      private cdr:ChangeDetectorRef) { }    //<----added 

getApplications() { 
     this.applicationService.getApplications() 
      .subscribe(
       applications => { 
        this.applications = applications; 
        this.cdr.detectChanges();    //<-----addded 
       }, 
       error => { 
        this.errorMessage = <any>error; 
       }); 
} 
+0

それはトリックでした!ありがとうございました!この状況でChangeDetectorRefが必要な理由の背後にある推論を知っていますか?あたかもその使用法を必要としない過去の同様のコードを書いたかのように感じます。 – Cobster

+0

AngularやAngleで知られていない角度のあるフレームワークから何らかのイベントが発生したときに、(サードパーティの)APIからデータを取得するサービスについては、バインディングのサイクルを実行できません。簡単な言葉では、コードの一部にAngularフレームワークが不足しています。 – micronyks

関連する問題