Can Angular-UI-Grid-Edit be used with "controller as" syntax?
Asked Answered
O

2

6

I've written my entire Angular app managing to avoid the use of $scope, using the "controller as" syntax instead, to help ease the transition to Angular 2.0 and because I believe this is the more current practice.

But I can't figure out how to avoid using $scope with ui-grid's gridApi.edit.on.afterCellEdit event, which is documented as follows:

gridApi.edit.on.afterCellEdit(scope,function(rowEntity, colDef){})

Parameters

rowEntity – {object} – the options.data element that was edited
colDef – {object} – the column that was edited
newValue – {object} – new value
oldValue – {object} – old value

Based on the documentation I have done this, which works (after injecting $scope into the controller):

ctrl.tableOptions.onRegisterApi = function(gridApi){
  ctrl.gridApi = gridApi;
  gridApi.edit.on.afterCellEdit( $scope, function(rowEntity,colDef, newValue, oldValue) {
    //save stuff here 
  });
};

but as you can see I had to use $scope in the event's callback, otherwise I get an error telling me scope.$on is not a function. Is it possible to NOT use $scope? I tried "this" but it only seems to want $scope.

Obviously, I don't really understand what I am doing, and I can't find much documentation on afterCellEdit other than this and the example which I slavishly followed above, so I am turning to you for help. Thousands of lines of $scope-free code, it seems like a shame to fall at the last hurdle!

thanks in advance

John

Oregano answered 18/3, 2015 at 4:28 Comment(0)
P
2

The solution is to use null instead:

gridApi.edit.on.afterCellEdit(null,function(rowEntity, colDef, newValue, oldValue)

From there you can always access the controller through the variable you set for it e.g vm and access most of what scope would contain.

Parthenos answered 9/9, 2015 at 16:21 Comment(0)
H
1

I had the same problem (...avoid using $scope with ui-grid's gridApi...) and did a basic app on plunker with ui-grid pagination. I hope this helps. http://plnkr.co/edit/sQos8J?p=preview

ng-click="main.gridApi2.pagination.previousPage()
Hydrated answered 21/3, 2015 at 22:15 Comment(1)
Did you ever figure out how to use the ui-grid callbacks (such as afterCellEdit or saveRow without injecting $scope into them? I can live with $scope (it's in my app now, and working fine) but it would be nice to be $scope free, like we will have to be under Angular 2.0Oregano

© 2022 - 2024 — McMap. All rights reserved.