【问题标题】:Injection Error Unknown provider注入错误未知的提供者
【发布时间】:2014-12-15 15:53:12
【问题描述】:

我正在尝试依赖注入服务,但出现以下错误

错误:[$injector:unpr] 未知提供者:allStatesServiceProvider

脚本:PlanDesignController

(function () {
   'use strict';
   var controllerId = 'PlanDesignController';

   angular.module('myApp').controller(controllerId, 
        ['$scope', 'planDesignService', 'allStatesService', 
        'logger', '$timeout', '$routeParams', '$location', PlanDesignController]);

   function PlanDesignController($scope, planDesignService, allStatesService
                            , logger, $timeout, $routeParams, $location) { }
}

脚本:allStatesService

(function () {
  'use strict';
  var serviceId = 'allStatesService';

  angular.module('myApp')
   .factory(serviceId, ['$http','logger', 'appSettings', 'breeze', allStatesService]);

  console.log("Gets into AllStatesService.js");

  function allStatesService($http, logger, appSettings) {}
}

我可以做些什么来解决这个错误?

【问题讨论】:

  • 为什么要将控制器和服务作为依赖注入?
  • 我不确定你的英语是不是很差,但我假设你问我为什么要向我的控制器注入服务?这允许我做的是访问方法/成员/属性/等。在我“注入”它的控制器内的那个“注入”服务中。这有助于澄清吗?

标签: javascript angularjs dependencies code-injection


【解决方案1】:

我不完全确定问题出在哪里。所以我创建了一个 plunker 来表明你的代码几乎可以工作。检查此working example。稍微调整了一下代码sn-p

angular.module('myApp', []); 

(function () {
  'use strict';
  var controllerId = 'PlanDesignController';

  angular.module('myApp').controller(controllerId, 
    ['$scope', 'planDesignService', 'allStatesService', 
     'logger', '$timeout', '$routeParams', '$location', PlanDesignController]);

    function PlanDesignController($scope, planDesignService, allStatesService
    , logger, $timeout, $routeParams, $location)
    { $scope.text = allStatesService.greet()}

})();

(function () {
  'use strict';
  var serviceId = 'allStatesService';

  angular.module('myApp')
    .factory(serviceId, ['$http', 'logger', 'appSettings', 'breeze'
    , allStatesService]);

 function allStatesService($http, logger, appSettings) {
   var greeting = function() {
     return "Welcome from service"
   };
   return {
     greet : greeting,
   };
 }

})();

现在的主要变化是服务返回一个名为 greet() 的函数的对象。这在控制器中被调用,其结果被放入作用域中。

这段代码 sn-p 显示,它几乎是一样的......但是working。这样可以帮助您找出原始代码中的不同之处......并使其运行

【讨论】:

  • 这段代码对我不起作用。实际上,我没有看到依赖注入有任何变化,而且 Plunkr 只测试控制器,而不是服务。服务是问题,我的控制器工作正常。
  • 我更新了 plunker 和 answer。现在您应该看到,该服务用于提供一些功能,其结果通过控制器显示......无论如何它有帮助吗?
  • 好吧,这看起来不错,但我不知道你所拥有的和我所拥有的之间是否有区别......我正在以相同的方式进行注射,这使得这个令人沮丧,因为我不明白为什么我应该得到那个错误!
  • 我预计会有一些……隐藏的差异。例如。不同的 .module() - 例如,Controller 转到 angular.module('myAppCtrls'),而 service 在 angular.module('myAppSrvc') ... 如果发生这种情况,您必须确定,一个模块确实加载了另一个 module('myAppCtrls', ['myAppSrvc'...]) 我怀疑这会......该问题的详细说明:stackoverflow.com/a/24902567/1679310
  • 好的,这是我的服务的问题。我没有像我应该的那样注射。我把它改成了:myApp.service('allStatesService', function ($http, $log, logger, appSettings,breath) {
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-21
  • 2013-01-25
相关资源
最近更新 更多