簡體   English   中英

在將服務注入控制器時獲取“未知提供者”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM