2017-05-17 8 views
0

私は、Jsonデータを取得してテーブルとして表示しているAngular2アプリケーションを持っています。新しいデータで更新/更新しようとすると、テーブルに古いデータのみが表示されます。以下のようなサービスを介してデータを取得Angular2テーブルがデータをリフレッシュしていません

:以下のようなテーブルで

@Input() 
participants:Participant[]; 

testClasses: TestClass[] = []; 

ngOnChanges() { 
    let codes=""; 

    for (let item of this.participants) 
    { 
     codes = codes.concat(item.Id).concat(","); 
    } 
    this.buildTable(codes); 
} 

buildTable(codes){ 

    let url = this.serverUrl + "api/test?codes=" + codes; 

    // passing input participants as parameter in url 
    this.testService.getData(url) 
     .subscribe(data => this.onDataUpdate(data)); 
} 

onDataUpdate(data: any) { 
    this.testClasses = data;  
    // here I am getting new/refreshed data. 
} 

がdisplying:

<table id="testGrid"> 
    <tr *ngFor="let testClass of testClasses"> 
    <td>{{testClass.name}}</td> 
    <td *ngFor="let t of (testClass.Score)"> 
     {{ t }} 
    </td> 
    </tr> 
</table> 

ページのロードデータは初めて、テーブルにデータを示しているが、私はデータを更新しようとすると、新しいリフレッシュされたデータがonDataUpdate関数で表示されますが、htmlテーブルでは新しいデータで表示が更新されません。

ご意見やご協力をいただければ幸いです。

私は下のリンクを試してみました:

https://github.com/swimlane/ngx-datatable/issues/255

Angular 2 - View not updating after model changes

+0

あなたが要求を行うためにngOnchangesを使用する理由私は理解していません。技術的には2回も2回発射する必要があり、最初のロード時にデータを2回(onDataUpdateで)表示する必要があります。とにかく、リフレッシュをどのようにトリガーしますか?クリックで?それは本当にコンポーネントなので、入力が変化したときにリフレッシュしたいのですか? – runit

+0

こんにちは@runit、私はチェックボックスのリストを持って、testServiceへの入力として選択項目を渡します。サービスがデータを取得していて、onDataUpdate関数で新しいデータを見ることはできますが、ビューは新しいデータで更新されていません。それが理にかなってほしい。また、私はサービスを呼び出すために私の質問を少し更新しました。私はライフサイクルフックを見たり、手動でビューをリフレッシュする必要があるかどうかはわかりません。 – Riddhi

答えて

0

を、私は私自身の例を作り、私は、現象を再現することができました。 ここでは、配列を入力として使用することができます。 (participants:Participant)。 あなたのチェックボックスについて述べたことは、配列を突然変異させたようです。それは効果のために、配列の参照がまだ同じであるために角度が変化を検出しないことを有する。 (それが期待される行動かどうかは分かりません)。

問題の解決策は、チェックボックスの各変更時に新しい参加者の配列を作成することです。そのような

何か: this.participants = this.participants.slice(0)

また、この答えになります:Angular2 change detection: ngOnChanges not firing for nested object

+0

はい、あなたは正しいです。静的なデータを渡すと、新しいデータでビューがリフレッシュされますが、入力配列を渡すと何とかそれが気に入らなくなります。 – Riddhi

関連する問題