2016-11-23 2 views
0

Ich habe eine Tabelle, die mit Smart Table in AngularJs erstellt wurde.Smart Table (AngularJs) asynchrone Datenänderung nicht aktualisiert

Ich versuche, neue Daten zu holen und mit ajax zu dieser Tabelle hinzuzufügen. Ich drücke auf $scope.rowCollection in Ajax zurückrufen. Warum werden die neu hinzugefügten Daten nicht in der Tabelle angezeigt? (Ich verwende st-safe-src, und ich bin das Hinzufügen neuer Daten zu der Sammlung in st-safe-src.)

Eine andere Frage ist: kann ich $scope.displayedCollection = [].concat($scope.rowCollection); jedes Mal hinzuzufügen haben st-safe-src geändert? (das Hinzufügen dieser Zeile löst das Problem nicht)

Ich habe diese Plunkr mit Timeout erstellt, um den Ajax-Rückruf zu simulieren.

Danke!

+0

Fügen Sie bitte etwas von Ihrem Code hinzu und machen Sie einen Plünderer. Auf diese Weise helfen mehr Leute. – alphapilgrim

Antwort

1

Ich reparierte Ihr Plunkr durch Aktualisierung des Timeout-Codes, so dass $scope.$apply aufgerufen wurde. Sie sollten $scope.$apply verwenden, um sicherzustellen, dass Winkel JS Komponenten benachrichtigt werden, dass Winkel JS Modelle geändert haben, wenn Sie einen nicht-Winkel AJAX-Aufruf (wie jQuery) oder mit Kern JS Rückrufen (wie jQuery): http://plnkr.co/edit/iI7zpSjmB2db4ryHuzp7?p=preview

 // use $timeout service so that we can automatically invoke 
     // the appropriate apply 
     $timeout(function() { 
     $scope.rowCollection.push({firstName: 'Laurent', lastName: 'Renard', birthDate: new Date('1987-05-21'), balance: 102, email: '[email protected]'}); 
     // do I need this? 
     $scope.displayedCollection = [].concat($scope.rowCollection); 
     console.log("executed"); 
     }, 2000, true); 

Sie können dies auch folgendermaßen tun:

 setTimeout(function() { 
     $scope.$apply(function() { 
      $scope.rowCollection.push({firstName: 'Laurent', lastName: 'Renard', birthDate: new Date('1987-05-21'), balance: 102, email: '[email protected]'}); 
      // do I need this? 
      $scope.displayedCollection = [].concat($scope.rowCollection); 
     }); 
     console.log("executed"); 
     }, 2000); 
+0

Danke! Und ich habe getestet, ich brauche '$ scope.displayedCollection = [] .concat ($ scope.rowCollection);'. Ich frage mich, warum viele Leute im Internet diese Zeile hinzugefügt haben. – Automatic

Verwandte Themen