问题
I try to detect cell edit but the following code does not get event. I use "name": "angular-ui-grid", "version": "3.0.0-rc.14", Do I have to define some configuration to get events?
$scope.$on('ngGridEventEndCellEdit', function(data) {
回答1:
I updated the default row template to look like below
rowTemplate: '<div ng-class="{\'row-changed\':row.entity.State==\'changed\'}" ng-click="grid.appScope.fnOne(row)" ng-repeat="col in colContainer.renderedColumns track by col.colDef.name" class="ui-grid-cell" ui-grid-cell></div>',
And then in onRegisterApi
onRegisterApi: function( gridApi ) {
            $scope.gridApi = gridApi;
            $scope.gridApi.edit.on.afterCellEdit($scope,function(rowEntity, colDef, newValue, oldValue){
                if(newValue != oldValue)
                    rowEntity.State = "changed";
            })
        }
The row will now get the class "row-changed" if the entity has the State "changed".
You might want to add some extra checks if the cell gets changed back to its original value, but that's another issue.
回答2:
You can use the beginCellEdit event:
gridApi.edit.on.beginCellEdit($scope, function(rowEntity, colDef) { ... });
回答3:
Are you interested in the cell being edited or the bound data?
I added a deep watch to the bound dataSource which will fire when any item in array changes.
unbindWatch = $scope.$watch("array", function (newValue, oldValue) {
    if (newValue != oldValue) {
        vm.isDirty = true;
     }
 }, true);
$watch returns a method to unbind the watch, stop looking for changes. So just execute the returned method to end the watch.
回答4:
For 'ngGridEventEndCellEdit' specific event, I think it is deprecated. Try this instead
$scope.$on('uiGridEventEndCellEdit', function(data) {
https://github.com/angular-ui/ui-grid/wiki/Grid-Events
Other option is:
You can use the row template which adds a css class for coloring the row. And then add this class when cell is edited.
function rowTemplate() {
        return '<div ng-class="{\'ui-grid-row-bg-red\':row.entity.IsEdited}" >' +
                  '<div ng-repeat="(colRenderIndex, col) in colContainer.renderedColumns track by col.colDef.name" class="ui-grid-cell" ng-class="{ \'ui-grid-row-header-cell\': col.isRowHeader}"  ui-grid-cell></div>' +
               '</div>';
    }
and define css class as:
  .gridStyle .ui-grid-row-bg-red .ui-grid-cell {
       background-color: #872f2f;
       color: #fff;
  }
And to detect cell edit:
$scope.gridApi.edit.on.afterCellEdit($scope,function(rowEntity, colDef, newValue, oldValue){
        })
Note:
Be sure that CSS class has higher specificity to change row background color.
But I have figured that it will need the grid to refresh to apply this css changes.
来源:https://stackoverflow.com/questions/28920028/detect-cell-edit-in-angular-ui-grid