AngularJS未知提供程序错误消息

时间:2017-06-08 13:17:55

标签: javascript angularjs

我有一个无法加载的角度应用,并且正在返回错误消息:

  

错误:[$ injector:unpr]未知提供者:navigatorProvider< -   navigator< - LayoutController

这是自从我介绍了一项服务,我在控制器上注册了它,但它仍然无法正常工作。引用的控制器是:

(function () {
    "use strict";
    angular.module("HtJobPortal").controller("LayoutController",LayoutController);

    LayoutController.$inject = ["$scope", "navigator"];

    function LayoutController($scope, navigator){      
        var layout = this;

        // Layout
        layout.loadTemplate = function() {
            return navigator.loadTemplate();
        }

        // Initialise pending and set roles
        layout.init = function () {
            // Global Start up
        };
        layout.init();
    }

})();

这是服务:

(function() {

    var navigator = angular.module('navigator', []);
    navigator.factory('loadTemplate', function () {
        var loadTemplate = this;

        // Page Directory
        navigator.login = "templates/login.html";
        navigator.dashboard = "templates/dashboard.html";
        navigator.job = "templates/job.html";

        // Template switcher
        navigator.loadTemplate = function () {
            return navigator.login;
        }

        return loadTemplate;
    });

}());

应用程序页面以防万一我错过了一些内容:

(function () {
    'use strict';

    angular.module('HtJobPortal', []);
})();

2 个答案:

答案 0 :(得分:2)

在定义HtJobPortal模块

时添加依赖项
//define dependencies
angular.module('HtJobPortal', ['navigator']);

在控制器中,您需要在控制器中注入工厂

(function () {
    "use strict";
    angular.module("HtJobPortal").controller("LayoutController",LayoutController);

    LayoutController.$inject = ["$scope", "loadTemplate"];

    function LayoutController($scope, loadTemplate){      
        var layout = this;
        // Layout
        layout.loadTemplate = function() {
            return loadTemplate.loadTemplate();
        }

        // Initialise pending and set roles
        layout.init = function () {
            // Global Start up
        };
        layout.init();
    }
})();

将工厂定义为

(function () {
    angular.module('navigator', []).factory('loadTemplate', function () {
        // Page Directory
        var login = "templates/login.html";
        var dashboard = "templates/dashboard.html";
        var job = "templates/job.html";

        return {
            // Template switcher
            loadTemplate: function () {
                return login;
            }
        };
    });
})();

答案 1 :(得分:1)

要创建factory\service\controllers,通常每次都不需要新模块。我们最好声明one module并将您的controller\factory\services注册到同一地址。

在您的情况下,您可以这样做:

(function() {
    angular.module('HtJobPortal', [..define other module dependency here..]);
    angular.module('HtJobPortal')
   .factory('loadTemplate', function () {
        var loadTemplate = {};    
        // Page Directory
        loadTemplate.login = "templates/login.html";
        loadTemplate.dashboard = "templates/dashboard.html";
        loadTemplate.job = "templates/job.html";

        // Template switcher
        loadTemplate.loadTemplate = function () {
            return loadTemplate .login;
        }    
        return loadTemplate; // return object from factory
    })
    .controller("LayoutController",LayoutController);    
    LayoutController.$inject = ["$scope", "loadTemplate"]; //inject factory   
    function LayoutController($scope, loadTemplate){      
        var layout = this;    
        // Layout
        layout.loadTemplate = function() {
            return loadTemplate.loadTemplate(); // call factory method
        }

        // Initialise pending and set roles
        layout.init = function () {
            // Global Start up
        };
        layout.init();
    };
}());