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
dann drücken Sie die "Daten hinzufügen" klicken.
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
};
}]);
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
Ich habe die Antwort aktualisiert, bitte überprüfen Sie es erneut –