2016-03-23 5 views
1

http://plnkr.co/edit/r9hMZk?p=previewwährend Daten aktualisieren

Ich habe einen ui-Gitter, wo ich Mehr Auswahl aktiviert haben. Ich möchte in der Lage sein, die Daten unter Beibehaltung der Auswahl zu aktualisieren. Wenn ich nur die Daten aktualisiere, wird die Auswahl nicht beibehalten.

$scope.gridOpts.data = data2; 

Jedoch habe ich eine rowIdentity Funktion definiert haben, so dass die ID-Spalte eine Zeile eindeutig identifiziert.

Wenn ich nun Zeilen mit id = Bob und id = Lorraine auswähle, dann aktualisiere die Daten, die Zeilen sind noch ausgewählt. Die anderen Felder in diesen Zeilen werden jedoch nicht aktualisiert.

Wie kann ich die Auswahl beibehalten und alle Daten aktualisieren?

Antwort

2

Ich denke, dass Sie IDs selbst verfolgen müssen. Daher sollten Sie rowIdentifier entfernen und stattdessen dieses Stück am Anfang Ihrer swapData-Funktion hinzufügen.

$scope.selIds = []; 
    for (var selRow of $scope.gridApi.selection.getSelectedRows()) { 
     $scope.selIds.push(selRow.id); 
    } 

Zusätzlich zu, dass ein Event-Handler auf rowsRendered fügen Sie diese erneut wählen Sie die zuvor ausgewählten Zeilen

gridApi.core.on.rowsRendered($scope,function() { 
    for (var selId of $scope.selIds) { 
     for (var row of $scope.gridOpts.data) { 
     if (selId == row.id) { 
      $scope.gridApi.selection.selectRow(row); 
     } 
     } 
    } 
    }); 

Sie können in Ihrem registerApi Rückruf setzen.

+0

Es funktioniert! Ich musste $ scope.gridApi.selection.unSelectRow (selRow) hinzufügen; um zu vermeiden, dass die Anzahl der "ausgewählten Gegenstände" ständig zunimmt. Ich frage mich nur, ob es eine bessere Lösung gibt. –

+0

Es ist wahrscheinlich eine Designentscheidung zu optimieren, wenn nichts in einer Rasterzeile aktualisiert wird, wenn die Identität mit dem vorherigen Datensatz übereinstimmt. Nur die Entwickler wissen .. –