自定义角度服务注入失败

时间:2015-03-05 22:18:28

标签: angularjs angularjs-service

我遇到了将自定义服务注入控制器的问题。当我尝试在页面上使用控制器时,收到以下错误:

Error: [$injector:unpr] http://errors.angularjs.org/1.3.14/$injector/unpr?p0=<div id="organizations-section" ng-include="'admin/organizations.html'" class="ng-scope">copeProvider%20%3C-%20%24scope%20%3C-%orgService
    at Error (native)
    at https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js:6:417
    at https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js:38:7
    at Object.d [as get] (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js:36:13)
    at https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js:38:81
    at d (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js:36:13)
    at e (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js:36:283)
    at Object.instantiate (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js:36:432)
    at Object.<anonymous> (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js:37:184)
    at Object.e [as invoke] (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js:36:315)

这是我的JavaScript文件,它定义了应用程序,服务和控制器:

管理员/ admin.js

adminApp = angular.module("admin", []);

adminApp.service("orgService", ["$scope", "$http", function($scope, $http){

}]);

adminApp.controller("OrganizationController", ["$scope", "orgService", function($scope, orgService){

}]);

admin.html.erb

<!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Admin</title>
    <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track' => true %>

    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
    <%= javascript_include_tag 'application' %>

    <%= csrf_meta_tags %>
  </head>
  <body ng-app="admin">
    <div id="organizations-section" ng-include="'admin/organizations.html'"></div>
  </body>
</html>

organizations.html

<div ng-controller="OrganizationController as orgCtrl">
  <h2>Organizations</h2>
</div>

我应该注意这是一个Rails 4.2应用程序。我试图删除尽可能多的代码来简化这个,我仍然看到了问题。如果我从Controller定义中删除orgService,那很好。但我似乎无法让那个人工作。我已经查看了服务定义的其他示例,并且没有看到问题。

2 个答案:

答案 0 :(得分:2)

您的服务声明存在问题

  

你不能将$ scope注入服务,没有这样的东西   Singleton $ scope。

如果您愿意,可以添加注入$rootScope。但通常service用于在其中放置常用方法,就像您可以从中调用ajax,然后返回适当的数据或承诺调用方法。

<强> CODE

adminApp = angular.module("admin", []);

adminApp.service("orgService", ["$http", 
   function($http){

   }
]);

adminApp.controller("OrganizationController", ["$scope", "orgService", 
    function($scope, orgService){
    }
]);

希望这可以帮到你谢谢。

答案 1 :(得分:1)

在控制器中使用依赖项注入时,您将$scopeorgService声明为依赖项,但您的函数有三个参数,包括notifyService

我认为您还需要在家属中声明notifyService

adminApp.controller('OrganizationController', ['$scope', 'orgService', 'notifyService',
  function($scope, orgService, notifyService){

}]);

确保服务notifyService存在,或将其从OrganizationController的依赖项中删除。