2017-05-22 1 views
1

Après ma mise à niveau de Angular 2 à Angular 4, primeng datatable est buggé car il ne voit pas les changements dans la liste qui est passée en tant que données.Bugged PrimEng détection de changement datatable après mise à niveau Angulaire à 4

Par exemple, j'ai datatable:

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

</p-dataTable> 

et quand je Modify « queuedJobs » tableau, le contenu datatable ne change pas la façon dont il était angulaire 2. Comment le résoudre? Avez-vous le même bug?

Cordialement Mateusz

Répondre

1

Nous avons le même problème dans notre projet. 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 
} 

Je pense que d'une certaine manière, la valeur du tableau interne de <p-dataTable/> n'est pas la même instance du tableau que vous modifiez, si les changements sont pas réfléchie.

Une solution temporaire consiste à forcer le tableau à une nouvelle instance chaque fois que vous modifiez:

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

Maintenant, la méthode de handleDataChange<p-dataTable/> est appelé, et les données sont nouveau rendu.

Ceci n'est pas une solution permanente. Espérons que la prochaine version de primeng corrigera ce problème.

EDIT: Je me rends compte maintenant que cela est dû à la façon dont ils ont mis le réseau interne:

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

Ce clone essentiellement le tableau, donc vos modifications ne seront jamais pris en compte. Certainement un bug.

Edit 2: comme Talpaz a souligné, this is a part of the design, de sorte que vous doit créer un nouveau tableau après l'ajout ou la suppression d'éléments.

+0

Création du nouveau tableau résout le problème. Fonctionnalité non intuitive si cela doit être par conception, à mon humble avis. –

+1

@ NullԀʇɹ92065 Depuis la version 4.1.0, vous pouvez maintenant spécifier '[immutable] =" false "' sur la table pour atteindre l'ancien comportement. –

+0

@ "Michael Kucinski" Merci, je vais essayer. –