2017-02-22 2 views
0

Ich habe ein UI-Grid mit Mehrfachauswahl aktiviert. Alles funktioniert gut, außer wenn sich die Daten ändern, zeigt die Spalte "Select" in der Kopfzeile den Zustand des Rasters nicht richtig an. Ich habe eine simple example in plunker erstellt, die das Problem veranschaulicht. Um zu reproduzieren, klicken Sie einfach auf die Schaltfläche zum Auswählen der Kopfzeile.AngularJS UI-Grid aktualisiert nicht Alle Status auswählen, wenn Daten geändert werden

All rows selected

dann drücken Sie die "Daten hinzufügen" klicken.

Header does not match grid state

Beachten Sie, dass der Header noch das Häkchen zeigt, aber die neu hinzugefügte Zeile nicht aktiviert ist.

var app = angular.module('app', ['ngTouch', 'ui.grid', 'ui.grid.selection']); 

app.controller('MainCtrl', ['$scope', function ($scope) { 
    $scope.swapData = function() { 
    if ($scope.gridOpts.data === data1) { 
     $scope.gridOpts.data = data2; 
     $scope.gridOpts.columnDefs = columnDefs2; 
    } 
    else { 
     $scope.gridOpts.data = data1; 
     $scope.gridOpts.columnDefs = columnDefs1; 
    } 
    }; 

    $scope.addData = function() { 
    var n = $scope.gridOpts.data.length + 1; 
    $scope.gridOpts.data.push({ 
       "firstName": "New " + n, 
       "lastName": "Person " + n, 
       "company": "abc", 
       "employed": true, 
       "gender": "male" 
       }); 
    }; 

    $scope.removeFirstRow = function() { 
    //if($scope.gridOpts.data.length > 0){ 
     $scope.gridOpts.data.splice(0,1); 
    //} 
    }; 

    $scope.reset = function() { 
    data1 = angular.copy(origdata1); 
    data2 = angular.copy(origdata2); 

    $scope.gridOpts.data = data1; 
    $scope.gridOpts.columnDefs = columnDefs1; 
    } 

    var columnDefs1 = [ 
    { name: 'firstName' }, 
    { name: 'lastName' }, 
    { name: 'company' }, 
    { name: 'gender' } 
    ]; 

    var data1 = [ 
    { 
     "firstName": "Cox", 
     "lastName": "Carney", 
     "company": "Enormo", 
     "gender": "male" 
    }, 
    { 
     "firstName": "Lorraine", 
     "lastName": "Wise", 
     "company": "Comveyer", 
     "gender": "female" 
    }, 
    { 
     "firstName": "Nancy", 
     "lastName": "Waters", 
     "company": "Fuelton", 
     "gender": "female" 
    }, 
    { 
     "firstName": "Misty", 
     "lastName": "Oneill", 
     "company": "Letpro", 
     "gender": "female" 
    } 
    ]; 

    var origdata1 = angular.copy(data1); 

    var columnDefs2 = [ 
    { name: 'firstName' }, 
    { name: 'lastName' }, 
    { name: 'company' }, 
    { name: 'employed' } 
    ]; 

    var data2 = [ 
    { 
     "firstName": "Waters", 
     "lastName": "Shepherd", 
     "company": "Kongene", 
     "employed": true 
    }, 
    { 
     "firstName": "Hopper", 
     "lastName": "Zamora", 
     "company": "Acium", 
     "employed": true 
    }, 
    { 
     "firstName": "Marcy", 
     "lastName": "Mclean", 
     "company": "Zomboid", 
     "employed": true 
    }, 
    { 
     "firstName": "Tania", 
     "lastName": "Cruz", 
     "company": "Marqet", 
     "employed": true 
    }, 
    { 
     "firstName": "Kramer", 
     "lastName": "Cline", 
     "company": "Parleynet", 
     "employed": false 
    }, 
    { 
     "firstName": "Bond", 
     "lastName": "Pickett", 
     "company": "Brainquil", 
     "employed": false 
    } 
    ]; 

    var origdata2 = angular.copy(data2); 

    $scope.gridOpts = { 
    columnDefs: columnDefs1, 
    data: data1, 
    enableRowSelection: true, 
    enableSelectAll: true, 
    selectionRowHeaderWidth: 35 
    }; 

}]); 

Antwort

0

Ich habe das Problem behoben Sie bitte diese verweisen: http://plnkr.co/edit/lJsWof?p=preview

wo diese Betonung Punkt

ist
$scope.gridApi.selection.clearSelectedRows(); 

Schritte für aktiviert oder deaktiviert alle Zeilen

  1. Holen Sie sich das Objekt des Gitters

  2. Aufruf theire Methoden Zeilen löschen

    $scope.gridApi.selection.clearSelectedRows() 
    

siehe diese http://ui-grid.info/docs/#/api/ui.grid.selection.api:PublicApi

+0

Danke für die Antwort, aber das ist keine praktikable Lösung. Plunker ist nur eine sehr einfache Demonstration des Problems. In meinem tatsächlichen Code habe ich Elemente hinzugefügt und subtrahiert basierend auf der Eingabe vom Benutzer. Ich möchte nicht löschen, was zuvor ausgewählt wurde. Ich möchte, dass das UI-Grid intelligent genug ist, um zu erkennen, dass alle Zeilen nicht mehr ausgewählt sind. Dies geschieht, wenn Sie manuell auf eine Zeile klicken. Wenn Sie beispielsweise auf die Schaltfläche "Daten hinzufügen" klicken, wird dem Raster eine neue Zeile hinzugefügt, die Kopfüberprüfung ist jedoch weiterhin ausgewählt. – wholladay

+0

Ich habe die Antwort aktualisiert, bitte überprüfen Sie es erneut –

Verwandte Themen