【问题标题】:Getting "Unknown Provider" while injecting service into controller在将服务注入控制器时获取“未知提供者”
【发布时间】:2014-06-02 21:31:12
【问题描述】:

我有我的应用程序:

'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 项目的一部分,但编译模式是调试 -

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

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

【问题讨论】:

    标签: javascript angularjs angularjs-service angularjs-injector


    【解决方案1】:

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

    我是这样做的:

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

    【讨论】:

      【解决方案2】:

      当您调用 Angular. module 只传入模块的名称,当你传入数组的第二个参数时,你正在重新定义模块并丢失一个依赖模块。

      创建模块

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

      引用一个模块:

      angular.module('name');
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 所有文件都添加到包中。我也尝试将所有这些代码放在一个文件中 - 结果相同。
        • 是的,它有效。但是当我尝试在我的 .Net 应用程序的 plunk(带有 1 个文件)中这样做时,我抛出了同样的错误
        • 清除缓存再试?另外,ProjectManager 是否在所有地方都拼写正确?
        • 解决了!非常感谢。缩小是一个问题。尽管它已通过设置 debug=on 关闭,但它继续压缩脚本。当我尝试使用
        • 这是救命稻草。我会花几个小时尝试调试它,但不会意识到是我的 enableOptimizations = true 导致了这个。
        猜你喜欢
        • 2016-12-07
        • 2016-01-12
        • 2015-12-21
        • 1970-01-01
        • 1970-01-01
        • 2014-12-19
        • 1970-01-01
        • 1970-01-01
        • 2016-10-25
        相关资源
        最近更新 更多