无法将$ http注入工厂

时间:2014-10-29 11:03:17

标签: angularjs

我正在尝试将$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的一些见解,但无法找到任何关于错误的提示。

1 个答案:

答案 0 :(得分:1)

我还没有真正测试过这些,但我相信你的问题可以通过多种方式解决:

1

使用angular.module('util', ['ng'])代替angular.module('util', [])

2

使用app.get('utilService')代替angular.injector(['util']).get('utilService')

3

删除var utilService = angular.injector(['util']).get('utilService');并添加utilService作为records函数的最后一个参数。我不确定这是否有效,因为我通常不使用这种形式的声明。

如果#3有效,请使用它,如果不使用#2。仅在必要时使用#1。

此外,您没有发布使用records的代码部分,但请确保您使用数组符号表示依赖项,否则在使用UglifyJS或类似代码修改代码时会遇到问题。