将服务注入控制器时获取“未知提供者”

时间:2014-04-18 11:15:51

标签: javascript angularjs angularjs-service angularjs-injector

我有我的应用程序:

'use strict';
angular.module('ProjectTracker', [
 'App.controllers',
 'App.services'
])

我的服务:

angular.module("App.services", [])
.factory('ProjectManager', function () {
    return {
        getAll: function () {
            return [{ID:'123123', Name:'2313'}];
        }
    }
});

我的控制器:

var appCtrl = angular.module('App.controllers', ['App.services']);
var ProjectsListController = ['$scope', 'ProjectManager', function ($scope, ProjectManager) {
    $scope.projectList = ProjectManager.getAll();
}];
appCtrl.controller('ProjectsListController', ProjectsListController);

但是当我开始时,它会把我抛出:

Error: [$injector:unpr] http://errors.angularjs.org/1.2.16/$injector/unpr?p0=ProjectManagerProvider%20%3C-%20ProjectManager t/<@http://localhost:14967/Areas/ProjectTrack/Scripts/angular    .min.js:6 ac/m.$injector<@http://localhost:14967/Areas/ProjectTrack/Scripts/angular.min.js:35 c@http://    localhost:14967/Areas/ProjectTrack/Scripts/angular.min.js:34 ac/p.$injector<@http://localhost:14967/Areas/    ProjectTrack/Scripts/angular.min.js:36 c@http://localhost:14967/Areas/ProjectTrack/Scripts/angular.min.js:34     d@http://localhost:14967/Areas/ProjectTrack/Scripts/angular.min.js:34 ac/g/<.instantiate@http://localhost:14967/    Areas/ProjectTrack/Scripts/angular.min.js:34 Od/this.$get</<@http://localhost:14967/Areas/ProjectTrack/Scripts/    angular.min.js:66 cc/this.$get</ia/J/<@http://localhost:14967/Areas/ProjectTrack/Scripts/angular.min.js:53 q@http://    localhost:14967/Areas/ProjectTrack/Scripts/angular.min.js:7 J@http://localhost:14967/Areas/ProjectTrack/Scripts/    angular.min.js:52 f@http://localhost:14967/Areas/ProjectTrack/Scripts/angular.min.js:46 f@http://localhost:14967/    Areas/ProjectTrack/Scripts/angular.min.js:46 cc/this.$get</x/<@http://localhost:14967/Areas/ProjectTrack/Scripts/    angular.min.js:46 $b/c/</<@http://localhost:14967/Areas/ProjectTrack/Scripts/angular.min.js:18 Yd/this.$get</h.    prototype.$eval@http://localhost:14967/Areas/ProjectTrack/Scripts/angular.min.js:108 Yd/this.$get</h.    prototype.$apply@http://localhost:14967/Areas/ProjectTrack/Scripts/angular.min.js:109 $b/c/<@http://localhost:14967/    Areas/ProjectTrack/Scripts/angular.min.js:18 d@http://localhost:14967/Areas/ProjectTrack/Scripts/angular.min.js:34     $b/c@http://localhost:14967/Areas/ProjectTrack/Scripts/angular.min.js:18 $b@http://localhost:14967/Areas/    ProjectTrack/Scripts/angular.min.js:18 Wc@http://localhost:14967/Areas/ProjectTrack/Scripts/angular.min.js:17     @http://localhost:14967/Areas/ProjectTrack/Scripts/angular.min.js:209 jQuery.Callbacks/fire@http://localhost:14967/    Scripts/jquery-2.0.3.js:2913 jQuery.Callbacks/self.fireWith@http://localhost:14967/Scripts/jquery-2.0.3.js:3025 .    ready@http://localhost:14967/Scripts/jquery-2.0.3.js:398 completed@http://localhost:14967/Scripts/jquery-2.0.3.js:93

我尝试了很多方法来注入我的服务,但没有任何效果。 这个angular-app是大型C#.NetMVC项目的一部分,但是compliation模式是调试 -

<compilation debug="true" targetFramework="4.5" />

因此,它不应该重命名我的变量(缩小应该关闭)。 我怎么能用我的服务?

3 个答案:

答案 0 :(得分:2)

我认为你在错误的地方声明了依赖...

我这样做:

var appCtrl = angular.module('App.controllers', ['App.services']);
var ProjectsListController =  function ($scope, ProjectManager) {
$scope.projectList = ProjectManager.getAll();
};
appCtrl.controller('ProjectsListController', ['$scope', 'ProjectManager', ProjectsListController]);

答案 1 :(得分:2)

在调用angular时,在app控制器中。模块只传递模块的名称,当你传入数组时,你正在重新定义模块并丢失一个依赖模块的第二个参数。

创建模块

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

参考模块:

angular.module('name');

答案 2 :(得分:1)

这些是在单独的文件中吗?模块设置,服务和控制器?如果是这样,很可能你没有将其中一个文件添加到Bundles.config中。错误消息指出您正在使用Angular的缩小版本。我建议你将其更改为调试版本,这样你就可以看到更有意义的消息。我有plunk所有这些在同一个文件中,它工作得很好。这就是让我相信你缺少参考的原因。此外,如果您向捆绑包添加脚本文件,请确保构建项目然后对其进行测试。