我正在尝试将$http
注入factory
,但我收到此错误:
Error: Unknown provider: $httpProvider <- $http <- utilService
这是我的factory
代码:
var util = angular.module('util', [])
.factory('utilService', ['$http', function($http) {
return {
translate: function(objects, prop) {
var keys = objects.map(function(o) {return o[prop];});
$http({method: 'POST', url: 'http://localhost:8080/rest/messages', data: keys}).
success(function(data, status, headers, config) {
return objects.map(function(o, rank) {return {'value': data[rank], 'object': o}});
});
}
};
}]);
我使用该服务的控制器的代码:
var app = angular.module('recordController', ['ui.bootstrap','dialogs', 'util']);
function records($scope, $http, $rootScope, $timeout, $dialogs) {
var utilService = angular.injector(['util']).get('utilService');
$scope.showForm = false;
$scope.states= [];
$scope.toggleForm = function() {
$scope.showForm = !$scope.showForm;
if($scope.showForm) {
if(!$scope.states.length) {
$http({method: 'GET', url: 'http://localhost:8080/rest/records/state'}).
success(function(data, status, headers, config) {
$scope.states = utilService.translate(data, 'state');
});
}
}
};
...
};
HTML
:
<div ng-app='recordController'>
<div ng-controller='records' >
...
</div>
</div>
它有什么问题吗?我一直在寻找StackOverflow和Google的一些见解,但无法找到任何关于错误的提示。
答案 0 :(得分:1)
我还没有真正测试过这些,但我相信你的问题可以通过多种方式解决:
使用angular.module('util', ['ng'])
代替angular.module('util', [])
。
使用app.get('utilService')
代替angular.injector(['util']).get('utilService')
。
删除var utilService = angular.injector(['util']).get('utilService');
并添加utilService
作为records
函数的最后一个参数。我不确定这是否有效,因为我通常不使用这种形式的声明。
如果#3有效,请使用它,如果不使用#2。仅在必要时使用#1。
此外,您没有发布使用records
的代码部分,但请确保您使用数组符号表示依赖项,否则在使用UglifyJS或类似代码修改代码时会遇到问题。