Angularjs 如何将服务注入gridApi事件?

Angularjs 如何将服务注入gridApi事件?,angularjs,angular-ui-grid,angularjs-resource,Angularjs,Angular Ui Grid,Angularjs Resource,我的控制器中有一个ng资源服务(我们称之为项): 要使用myItems服务发出POST请求以保存编辑: $scope.items_grid.onRegisterApi = function(gridApi, Items) { $scope.gridApi = gridApi; gridApi.edit.on.afterCellEdit($scope, function(rowEntity, colDef, newValue, oldValue) {

我的控制器中有一个ng资源服务(我们称之为):

要使用myItems服务发出POST请求以保存编辑:

$scope.items_grid.onRegisterApi = function(gridApi, Items) {
        $scope.gridApi = gridApi;
        gridApi.edit.on.afterCellEdit($scope, function(rowEntity, colDef, newValue, oldValue) {
            $scope.$apply();
            var field = colDef['name'];
            Items.get({'id':rowEntity._id.$oid}, function(item) {
                item[field] = newValue;
                item.$save;
            }); 
        });
    };
但在控制台上,我得到了
TypeError:无法读取未定义的属性“get”


如何在afterCellEdit事件上正确注入我的服务?

您会遇到此错误,因为
onRegisterApi
函数不支持依赖注入,并且
等于
未定义的
或其他内容(请尝试在控制台中记录它)

您可以使用
$injector
检索依赖项,或者将它们声明为函数参数,但是,仅在实现IoC的情况下

如果您无法访问其中任何一个,至少可以这样做:
var Items=angular.element(document.body).injector().get('Items')



请发布完整的控制器脚本,以获得更优雅的答案。

您应该将
项注入控制器,而不是将其作为函数参数传递

依赖项是从控制器函数中注入的,而不是从函数参数中注入的。基本上,您需要将
服务依赖项注入到
$scope.Items\u grid.onRegisterApi
所属的angular
控制器

控制器

app.controller('myCtrl', function($scope, Items){ //<--inject items dependency here

   //you controller code

   $scope.items_grid.onRegisterApi = function(gridApi) { //<-- removed Items from here
        $scope.gridApi = gridApi;
        gridApi.edit.on.afterCellEdit($scope, function(rowEntity, colDef, newValue, oldValue) {
            $scope.$apply();
            var field = colDef['name'];
            Items.get({'id':rowEntity._id.$oid}, function(item) {
                item[field] = newValue;
                item.$save; //this line seems doubtful
            }); 
        });
    };

})

app.controller('myCtrl',函数($scope,Items){/@paulserikov它有帮助吗?
app.controller('myCtrl', function($scope, Items){ //<--inject items dependency here

   //you controller code

   $scope.items_grid.onRegisterApi = function(gridApi) { //<-- removed Items from here
        $scope.gridApi = gridApi;
        gridApi.edit.on.afterCellEdit($scope, function(rowEntity, colDef, newValue, oldValue) {
            $scope.$apply();
            var field = colDef['name'];
            Items.get({'id':rowEntity._id.$oid}, function(item) {
                item[field] = newValue;
                item.$save; //this line seems doubtful
            }); 
        });
    };

})