我遇到了将自定义服务注入控制器的问题。当我尝试在页面上使用控制器时,收到以下错误:
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文件,它定义了应用程序,服务和控制器:
adminApp = angular.module("admin", []);
adminApp.service("orgService", ["$scope", "$http", function($scope, $http){
}]);
adminApp.controller("OrganizationController", ["$scope", "orgService", function($scope, orgService){
}]);
<!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>
<div ng-controller="OrganizationController as orgCtrl">
<h2>Organizations</h2>
</div>
我应该注意这是一个Rails 4.2应用程序。我试图删除尽可能多的代码来简化这个,我仍然看到了问题。如果我从Controller定义中删除orgService
,那很好。但我似乎无法让那个人工作。我已经查看了服务定义的其他示例,并且没有看到问题。
答案 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)
在控制器中使用依赖项注入时,您将$scope
和orgService
声明为依赖项,但您的函数有三个参数,包括notifyService
。
我认为您还需要在家属中声明notifyService
:
adminApp.controller('OrganizationController', ['$scope', 'orgService', 'notifyService',
function($scope, orgService, notifyService){
}]);
确保服务notifyService
存在,或将其从OrganizationController
的依赖项中删除。