PrimeNg-Datentabelle wird nicht aktualisiert

9

Verwenden von Angular v2.4.8 und PrimeNg v1.1.4

Ich habe eine Seite mit zwei Komponenten:

  1. Dropzone, um Dateien hochzuladen
  2. p-datatable zum Anzeigen der hochgeladenen Dateien

Ich habe Dropzone konfiguriert, um 5 Dateien gleichzeitig zu senden, und wenn es mit 5 Dateien fertig ist, wird das Ereignis onDropZoneSendingMultiple ausgelöst. Wenn alle Dateien hochgeladen sind, wird onDropZoneQueueComplete ausgelöst.

In beiden Listenern möchte ich die Datentabelle aktualisieren, die sich in der zweiten Komponente befindet. Das funktioniert nicht. Ich muss die Seite aktualisieren, um die neuen Dateien zu sehen.

Mein HTML der Hauptseite:

%Vor%

Die Dropzone -Komponente zeigt die Dropzone. Die FilesList zeigt die Datentabelle an. Teil des HTML:

%Vor%

In meiner Haupt-ts-Datei habe ich:

%Vor%

In meiner Dateiliste habe ich

%Vor%

getFiles wird auch beim Laden der Seite aufgerufen. Wenn ich console.log() -Anweisungen hinzufüge, kann ich sehen, dass getFiles() aufgerufen wird und this.files aktualisiert wird, aber die Tabelle nicht aktualisiert wird.

    
Paul Meems 03.03.2017, 19:59
quelle

5 Antworten

9

Für alle, die immer noch nach der neuen Syntax zum Hinzufügen von Datensätzen zu einem Array suchen, das an eine Primeng-Tabelle gebunden ist

this.arrayRecords= [...this.arrayRecords, newObject];

    
karthiks3000 06.07.2017 20:40
quelle
8

Update : PrimeNG hat kürzlich die DoCheck-Schnittstelle entfernt, die Änderungen automatisch erkannt hat, siehe: Ссылка

Die Antwort ist die Verwendung des Spread-Operators ([... arr] - Ссылка ), um Elemente zu Ihrem Array anstelle von .push () hinzuzufügen.

Ursprüngliche Antwort : Ich hatte ein ähnliches Problem, das ich mit einem etwas anderen Ansatz gelöst habe. Wenn Sie den gleichen Dienst zum Hochladen und Abrufen Ihrer Dateien verwenden, können Sie RxJS verwenden, anstatt Ereignisse über Komponenten hinweg zu hören.

Auf meinen Diensten möchte ich über die App neu laden, wenn ich einen POST oder PUT mache, den ich benutze:

%Vor%

In Ihren POST- und / oder PUT-Methoden

%Vor%

Mit dieser Option können Sie das FileService.shouldUpdateObservable in Ihren Komponenten abonnieren:

%Vor%

Dies scheint der beste Weg zu sein, die Kommunikation über einen Dienst zwischen Komponenten, die ich gesehen / benutzt habe, zu handhaben.

-Edit- Hier ist das gleiche Konzept in der offiziellen Dokumentation:
Ссылка

-Edit 2- Ich habe dieses Problem nach der Aktualisierung auf 4.0.0 erneut behoben. FWIW, ich entfernte das PrimeNG-Datatable, stattdessen ein Handbuch * ngFor und es hat gut funktioniert. Es scheint, dass die PrimeNg-Dokumentation ( Ссылка ) dir sagt:

"Verwenden Sie zum Beispiel beim Entfernen eines Elements anstelle von Spleißen die Option slice oder verwenden Sie beim Hinzufügen eines Elements den Spread-Operator anstelle der Push-Methode."

Ich bin mir nicht sicher, warum sie Sie darum bitten, weil dies im Gegensatz zu der offiziellen Angular-Dokumentation steht, aber ich glaube, es hat etwas damit zu tun, warum die [value] -Bindung nicht so funktioniert, wie Sie es erwarten würden .

Persönlich entferne ich mich von PrimeNg zugunsten der Kovalenz Datentabelle, die eine explizite refresh () Funktion hat: Ссылка

    
rbj325 11.03.2017 03:49
quelle
1

Ich vermute, dass dies damit zu tun hat, wie Ihre Kindkomponente Änderungen verarbeitet. Sie sollten das onChange-Ereignis implementieren und die Dateien auf diese Weise festlegen. Hier ist ein Beispiel:

'' '

%Vor%

'' '

    
Ben Richards 09.03.2017 17:56
quelle
1

UPDATE : Ich habe mir die Dokumentation für p-dataTable genauer angeschaut, insbesondere den Abschnitt Change Detection. Ich habe das Attribut [immutable]=false -Attribut im Tag p-dataTable entfernt und stattdessen erhalte ich jetzt die Tabelle zum Aktualisieren, indem ich so etwas zurückgebe, wenn ich das zugrunde liegende Array modifiziere:

return myOriginalArray.slice();

ORIGINAL : Ich hatte Probleme damit, p-datatable zu aktualisieren / zu aktualisieren, wenn ich ein Element aus dem zugrunde liegenden Array entfernte, das zum Auffüllen der Tabelle verwendet wurde. Keine Ahnung, warum, aber das Hinzufügen des folgenden Attributs zum p-datatable -Tag bestimmte Dinge für mich:

[immutable]=false

Ich benutze PrimeNG ^ 4.1.3

    
twosouth 26.10.2017 18:25
quelle
0
___ qstnhdr ___ PrimeNg-Datentabelle wird nicht aktualisiert ___ answer44958479 ___

Für alle, die immer noch nach der neuen Syntax zum Hinzufügen von Datensätzen zu einem Array suchen, das an eine Primeng-Tabelle gebunden ist

%code%

    
___ qstntxt ___

Verwenden von Angular v2.4.8 und PrimeNg v1.1.4

Ich habe eine Seite mit zwei Komponenten:

  1. Dropzone, um Dateien hochzuladen
  2. p-datatable zum Anzeigen der hochgeladenen Dateien

Ich habe Dropzone konfiguriert, um 5 Dateien gleichzeitig zu senden, und wenn es mit 5 Dateien fertig ist, wird das Ereignis %code% ausgelöst. Wenn alle Dateien hochgeladen sind, wird %code% ausgelöst.

In beiden Listenern möchte ich die Datentabelle aktualisieren, die sich in der zweiten Komponente befindet. Das funktioniert nicht. Ich muss die Seite aktualisieren, um die neuen Dateien zu sehen.

Mein HTML der Hauptseite:

%Vor%

Die %code% -Komponente zeigt die Dropzone. Die %code% zeigt die Datentabelle an. Teil des HTML:

%Vor%

In meiner Haupt-ts-Datei habe ich:

%Vor%

In meiner Dateiliste habe ich

%Vor%

%code% wird auch beim Laden der Seite aufgerufen. Wenn ich %code% -Anweisungen hinzufüge, kann ich sehen, dass %code% aufgerufen wird und %code% aktualisiert wird, aber die Tabelle nicht aktualisiert wird.

    
___ tag123angular ___ Fragen zu Angular, dem Web-Framework von Google. Verwenden Sie dieses Tag für Angular-Fragen, die nicht für eine einzelne Version spezifisch sind. Verwenden Sie für das ältere AngularJS-Webframework (1.x) das angularjs-Tag. ___ answer42731114 ___

Update : PrimeNG hat kürzlich die DoCheck-Schnittstelle entfernt, die Änderungen automatisch erkannt hat, siehe: Ссылка

Die Antwort ist die Verwendung des Spread-Operators ([... arr] - Ссылка ), um Elemente zu Ihrem Array anstelle von .push () hinzuzufügen.

Ursprüngliche Antwort : Ich hatte ein ähnliches Problem, das ich mit einem etwas anderen Ansatz gelöst habe. Wenn Sie den gleichen Dienst zum Hochladen und Abrufen Ihrer Dateien verwenden, können Sie RxJS verwenden, anstatt Ereignisse über Komponenten hinweg zu hören.

Auf meinen Diensten möchte ich über die App neu laden, wenn ich einen POST oder PUT mache, den ich benutze:

%Vor%

In Ihren POST- und / oder PUT-Methoden

%Vor%

Mit dieser Option können Sie das FileService.shouldUpdateObservable in Ihren Komponenten abonnieren:

%Vor%

Dies scheint der beste Weg zu sein, die Kommunikation über einen Dienst zwischen Komponenten, die ich gesehen / benutzt habe, zu handhaben.

-Edit- Hier ist das gleiche Konzept in der offiziellen Dokumentation:
Ссылка

-Edit 2- Ich habe dieses Problem nach der Aktualisierung auf 4.0.0 erneut behoben. FWIW, ich entfernte das PrimeNG-Datatable, stattdessen ein Handbuch * ngFor und es hat gut funktioniert. Es scheint, dass die PrimeNg-Dokumentation ( Ссылка ) dir sagt:

"Verwenden Sie zum Beispiel beim Entfernen eines Elements anstelle von Spleißen die Option slice oder verwenden Sie beim Hinzufügen eines Elements den Spread-Operator anstelle der Push-Methode."

Ich bin mir nicht sicher, warum sie Sie darum bitten, weil dies im Gegensatz zu der offiziellen Angular-Dokumentation steht, aber ich glaube, es hat etwas damit zu tun, warum die [value] -Bindung nicht so funktioniert, wie Sie es erwarten würden .

Persönlich entferne ich mich von PrimeNg zugunsten der Kovalenz Datentabelle, die eine explizite refresh () Funktion hat: Ссылка

    
___ antwort43998356 ___

Wir können die Ansicht für check markieren und detechchange aufrufen.

%Vor%     
___ tag123datatable ___ Der Begriff "Datentabelle" ist mehrdeutig. In .NET ist es eine Klasse, die eine Tabelle mit In-Memory-Daten darstellt. In komponentenbasierten MVC-Frameworks wie JSF und Wicket ist es eine UI-Komponente, die eine HTML-Tabelle basierend auf einer Sammlung dynamisch rendert. Verwenden Sie für das jQuery DataTables-Plug-in das Tag [datatables], für das data.table-R-Paket bitte [data.table]. ___ answer46961333 ___

UPDATE : Ich habe mir die Dokumentation für p-dataTable genauer angeschaut, insbesondere den Abschnitt Change Detection. Ich habe das Attribut %code% -Attribut im Tag %code% entfernt und stattdessen erhalte ich jetzt die Tabelle zum Aktualisieren, indem ich so etwas zurückgebe, wenn ich das zugrunde liegende Array modifiziere:

%code%

ORIGINAL : Ich hatte Probleme damit, %code% zu aktualisieren / zu aktualisieren, wenn ich ein Element aus dem zugrunde liegenden Array entfernte, das zum Auffüllen der Tabelle verwendet wurde. Keine Ahnung, warum, aber das Hinzufügen des folgenden Attributs zum %code% -Tag bestimmte Dinge für mich:

%code%

Ich benutze PrimeNG ^ 4.1.3

    
___ tag123primeng ___ Verwenden Sie dieses Tag für Fragen zu PrimeNG, einer Sammlung von UI-Komponenten für Angular. Fragen, die [primeng] getaggt wurden, sollten auch mit eckigen Tags versehen werden [eckig]. ___ answer42702293 ___

Ich vermute, dass dies damit zu tun hat, wie Ihre Kindkomponente Änderungen verarbeitet. Sie sollten das onChange-Ereignis implementieren und die Dateien auf diese Weise festlegen. Hier ist ein Beispiel:

'' '

%Vor%

'' '

    
___
blazehub 16.05.2017 10:03
quelle

Tags und Links