单元格类更改被推迟到下一个编辑或滚动

时间:2016-08-29 10:31:15

标签: angularjs angular-ui-grid

我试图用蓝色标记在UI Grid单元格中编辑。为此,在Activity事件中,我在行实体中进行了一些更改。 afterCellEdit函数检查这些标记并返回相应的类名。也使用了cellClass(在文档中指定)的调用。

以下示例已简化,因为没有检查,已编辑了哪个列。在真正的应用程序中,我有更复杂的代码来标记特定的单元格。但这个例子足以说明问题:

  1. $scope.$apply列中选择单元格(但不在最后一行)。
  2. 更改那里的值。
  3. 输入
    Tha值更改,Company列更改为true,选择移至下一行,但已编辑单元格中的文本仍为黑色
  4. 再次按 Enter 在步骤2单元格中编辑的文本变为蓝色。
  5. 如何在第3步强制换色而不是4?

    http://plnkr.co/edit/SEEf4DPhA3CB1mx7R4I8?p=preview

    
    
    Edited
    
    var app = angular.module('app', ['ngAnimate', 'ngTouch', 'ui.grid', 'ui.grid.selection', 'ui.grid.edit', 'ui.grid.cellNav']);
    
    app.controller('MainCtrl', ['$scope', '$http', function ($scope, $http) {
      $scope.gridOptions = {
        enableCellEditOnFocus: true,
        
        columnDefs: [{
          field: 'edited',
          enableCellEdit: false
        },{
          field: 'company',
          cellClass: function(grid, row, col, rowRenderIndex, colRenderIndex) {
            return row.entity.edited ? 'blue' : '';
          }
        }],
        
        onRegisterApi: function (gridApi) {
          gridApi.edit.on.afterCellEdit($scope, function (rowEntity, colDef, newValue, oldValue) {
            if (newValue !== oldValue) {
              rowEntity.edited = true;
              $scope.$apply();
            }
          });
        }
      };
    
      $http.get('https://cdn.rawgit.com/angular-ui/ui-grid.info/gh-pages/data/100.json')
        .success(function(data) {
          $scope.gridOptions.data = data;
        });
    }]);
    
    .grid {
      width: 500px;
      height: 200px;
    }
    
    .blue {
      color: blue;
    }
    
    
    

    PS:Same question in Russian.

1 个答案:

答案 0 :(得分:2)

您可以使用notifyDataChange让uigrid知道值已更改。

juste在您的控制器中注入uiGridConstants并将$scope.apply()替换为gridApi.core.notifyDataChange(uiGridConstants.dataChange.COLUMN);

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

    app.controller('MainCtrl', ['$scope', '$http','uiGridConstants', function ($scope, $http,uiGridConstants) {
    $scope.gridOptions = {
    enableCellEditOnFocus: true,

    columnDefs: [{
      field: 'edited',
      enableCellEdit: false
    },{
      field: 'company',
      cellClass: function(grid, row, col, rowRenderIndex, colRenderIndex) {
        return row.entity.edited ? 'blue' : '';
      }
    }],

    onRegisterApi: function (gridApi) {
      gridApi.edit.on.afterCellEdit($scope, function (rowEntity, colDef, newValue, oldValue) {
        if (newValue !== oldValue) {
          rowEntity.edited = true;
          gridApi.core.notifyDataChange(uiGridConstants.dataChange.COLUMN);
        }
      });
    }
};

$http.get('https://cdn.rawgit.com/angular-ui/ui-grid.info/gh-pages/data/100.json')
    .success(function(data) {
      $scope.gridOptions.data = data;
    });
}]);

一名工作人员: http://plnkr.co/edit/GrseKTm6EF2CdWiNhXM7?p=preview