2016-07-29 18 views
1

Ich arbeite an einer Massenaktion auf einem ng-Grid. Bei Auswahl aller Zeilen sind die ausgewählten Elemente das erste Mal korrekt, aber nach der ersten Massenaktion sind die ausgewählten Elemente leer. Mit dem folgenden Code wird eine Benachrichtigung gesendet, dass "mindestens eine Zeile zum Verschieben ausgewählt werden muss". Bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen. Danke im Voraus.angular ng-grid selected Items ist nach der ersten Iteration leer

vm.init = function() { 
    vm.title = "Orphan Entries"; 
    selectReport("OrphanEntries"); 
}; 
/* initialization */ 
vm.init(); 

vm.gridOptionsReports = { 
      data: 'vm.data', 
      multiSelect: true, 
      enableColumnResize: true, 
      showFooter: true, 
      showSelectionCheckbox: true, 
      enableRowSelection: true, 
      selectWithCheckboxOnly: true, 
      selectedItems: [], 
      selectionCheckboxColumnWidth: 25, 
      enablePaging: true, 
      pagingOptions: $scope.pagingOptions 
     } 

$scope.applyBulkAction = function(){ 
    if(vm.selectedAction == 'notset'){ 
     Notification.error("You need to select a bulk action."); 
    }else{ 
     var rows = vm.gridOptionsReports.selectedItems; 
     if(rows.length < 1){ 
      Notification.error("Must select at least 1 row to move."); 
     }else{ 
      var toggleTo = 0; 
      if(vm.selectedAction == 'move'){ 
       toggleTo = 1; 
      } 
      var data = ""; 
      var first =true; 
      for(var i = 0; i< rows.length; i++){ 
       if(rows[i].selectedToBeMoved != toggleTo){ 
        if(first){ 
         data = '{"ID":"'+rows[i].iD+'"}'; 
         first = false; 
        }else{ 
         data = data + ',{"ID":"'+rows[i].iD+'"}' 
        } 
       } 
      } 
      if(data == ""){ 
       Notification.error("The rows that you have selected have already been flagged.") 
       }else{ 
        return ReportService.flagOrphansToBeMoved(data).then(flagOrphansToBeMovedComplete).catch(flagOrphansToBeMovedFailed); 

        function flagOrphansToBeMovedComplete(response) { 
         if(!response.data.error && response.data.status == 200){ 
          Notification.success('Bulk action was successful. All flagged rows will be moved during the next scan.'); 
          //vm.gridOptionsReports.selectedItems = []; 
          vm.init(); 
         }else{ 
          Notification.error('Error scheduling to move orphan.'); 
         } 
         return response; 
        } 

        function flagOrphansToBeMovedFailed(error) { 
         Notification.error('Error scheduling to move orphan.'); 
        } 
       } 
      } 
     } 
    } 

UI

enter image description here

UI-Code:

<div class="row smallPaddingBot"> 
<div class="col-sm-2"> 
    <select ng-model="vm.selectedAction" class="form-control"> 
     <option value="notset">Bulk Actions</option> 
     <option value="move">Flag Selected To Be Moved</option> 
     <option value="dontMove">Flag Selected Not To Moved</option> 
    </select> 
</div> 
<div class="col-sm-1"> 
    <button type="button" class="btn btn-default" ng-click="applyBulkAction()">Apply</button> 
</div> 

+0

Möchten Sie Sicht etwas ausmachen, veröffentlichen und ? –

+0

@LeonardoLana Ich habe gerade hinzugefügt, wie es aussieht, wenn ich durch jede Iteration gehe. –

Antwort

0

Das Problem war, dass ich neu zu erstellen, die ng- Grid jedes Mal, so war ich in Umfang verloren. Die Lösung bestand darin, gridOptionsReports.selectedItems auf eine Bereichsvariable zu setzen und dann auf diese Bereichsvariable zu verweisen.

Von:

selectedItems: [], 

An:

selectedItems: vm.selectedRow, 

Und:

var rows = vm.gridOptionsReports.selectedItems; 

An:

var rows = vm.selectedRows;