我的控制器中有一个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 事件中正确注入我的服务?
答案 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
});
});
};
})