2017-05-22 8 views
1

角度2から角度4にアップグレードした後、データとして渡されるリストの変更が表示されないため、primengデータテーブルが盗聴されます。アップグレード後のBuged PrimEng datatable変更検出角度4

例えば、私がデータテーブルがあります。

<p-dataTable selectionMode="single" [resizableColumns]="true" [rows]="20" [paginator]="true" [value]="queuedJobs" [rowHover]="true" [globalFilter]="gb" [style]="{'cursor':'pointer'}"> 

</p-dataTable> 

を、私は「queuedJobs」配列を変更すると、データテーブル内容は、それはそれを解決するためにどのように角度2にあった方法を変更しないのですか?同じバグがありますか?

よろしく はMateusz

答えて

1

我々は、我々のプロジェクトで同じ問題を持っています。 I think the answer lies in the way PrimeNG handles value changes:変更が反映さないをしているよう

@Input() get value(): any[] { 
    return this._value; 
} 

set value(val:any[]) { 
    this._value = val ? [...val] : null; 
    this.handleDataChange(); //filter the value 
} 

私の推測では、何らかの形で、<p-dataTable/>の内部配列の値が変更している配列の同じインスタンスではないということです。

一時的な回避策は、あなたがそれを変更するたびに新しいインスタンスする配列を強制することです:

//...after you've done your array updates 
this.queuedJobs = this.queuedJobs.slice(); // does a shallow clone of the array 

<p-dataTable/>handleDataChangeメソッドが呼び出され、データが再レンダリングされます。

これは永続的な解決策ではありません。うまくいけば、次のバージョンのprimengがこの問題を修正することを望みます。

EDIT:私は今、それは彼らが内部配列を設定方法が原因であることを認識は:

this._value = val ? [...val] : null; 

これは、本質的に配列を複製し、したがって、あなたの変更が反映されることはありません。間違いなくバグ。

編集2:talpazは、this is a part of the designを指摘し、あなたが要素を追加または削除した後、新しい配列を作成する必要がありますよう。

+0

は、新しい配列が問題を解決作成を参照してください。これが設計によるものであれば直感的ではない機能、imho。 –

+1

@NullԀʇɹ920654.1.0からは、テーブル上で '[immutable] =" false "'を指定して、古い動作を実現できるようになりました。 –

+0

@ "Michael Kucinski"ありがとう、私はそれを試してみましょう。 –

関連する問題