如何将服务注入gridApi事件?

时间:2015-12-12 15:04:02

标签: angularjs angular-ui-grid angularjs-resource

我的控制器中有一个ng-resource服务(让我们称之为项目):

app.factory("Items", function($resource) {
    return $resource("/api/items/:id");
});

想要使用我的商品服务

发出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: Cannot read property 'get' of undefined

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

2 个答案:

答案 0 :(得分:0)

您收到此错误是因为onRegisterApi函数不支持依赖注入,Items等于undefined或其他(尝试在控制台中记录)...

您可以使用$injector检索依赖项或将它们声明为函数参数,但仅限于实现IoC的地方...

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

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

答案 1 :(得分:0)

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

依赖关系从控制器函数注入,而不是从函数参数注入。基本上,您需要在Items所属的角controller中注入$scope.items_grid.onRegisterApi服务依赖项。

<强>控制器

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
            }); 
        });
    };

})