[英]Getting “Unknown Provider” while injecting service into controller
我有我的应用程序:
'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大项目的一部分,但是编译模式是debug-
<compilation debug="true" targetFramework="4.5" />
因此,它不应重命名我的变量(应关闭最小化)。 我如何使用我的服务?
我认为您在错误的位置声明了依赖项。
我这样做是这样的:
var appCtrl = angular.module('App.controllers', ['App.services']);
var ProjectsListController = function ($scope, ProjectManager) {
$scope.projectList = ProjectManager.getAll();
};
appCtrl.controller('ProjectsListController', ['$scope', 'ProjectManager', ProjectsListController]);
在您的应用控制器中,当您调用angular时。 module仅传递模块的名称,当您传递数组的第二个参数时,您将重新定义模块并失去依赖模块。
创建模块
angular.module('name', []);
引用模块:
angular.module('name');
这些是否在单独的文件中? 模块设置,服务和控制器? 如果是这样,很可能您尚未将其中一个文件添加到Bundles.config中。 错误消息指出您正在使用Angular的缩小版本。 我建议您将其更改为调试版本,以便看到更有意义的消息。 我已经花掉了所有的这些在同一个文件,它工作得很好。 这就是让我相信您缺少参考的原因。 另外,如果将脚本文件添加到包中,请确保您构建了项目,然后对其进行了测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.