Angular:[$ injector:unpr]未知提供者:

时间:2016-01-29 06:35:06

标签: javascript angularjs

routes.js

angular
        .module('main')
        .config(config);

    config.$inject = ['$routeProvider', '$httpProvider'];

    function config($routeProvider){

        $routeProvider
            .when('/', {
                templateUrl:'main/views/landing.client.view.html',
                controller:'MainController',
                controllerAs:'mainCtrl',
                resolve: {
                    orgTypes: orgTypes
                }
            })
            .otherwise({
                redirectTo:'/'
            });

    }


    function orgTypes($http){

        return $http
            .get('emrsvs/orgTypes')
            .then(function successCallBack(response){
                return response;
            }, function errorCallBack(error){
                console.log(error);
            });

    }

controller.js

 angular
        .module('main')
        .controller('MainController', MainController);

    MainController.$inject = ['$rootScope', '$timeout', 'orgTypes'];

    function MainController($rootScope, $timeout, orgTypes){

        var mainCtrl = this;
        mainCtrl.orgTypes = orgTypes;

    }

错误

[$injector:unpr] Unknown provider: orgTypesProvider <- orgTypes <- MainController

这里我从路由到控制器注入一个依赖'orgTypes'。它产生了未知的提供程序错我的sysntax有什么问题吗?谁能找到我的错误

2 个答案:

答案 0 :(得分:1)

在orgTypes函数定义之前,您应该在routes.js中包含以下代码

&#13;
&#13;
angular.module('main')
        .factory('orgTypes', orgTypes);
    orgTypes.$inject = ['$http'];
/*You need to apply following changes also in controller*/
angular
    .module('main')
    .controller('MainController', MainController);

MainController.$inject = ['$rootScope', '$timeout', 'orgTypes'];

function MainController($rootScope, $timeout, orgTypes){

    var mainCtrl = this;
    orgTypes.then(function(response){
      mainCtrl.orgTypes = response;
    }) 

}
 
&#13;
&#13;
&#13;

答案 1 :(得分:0)

如果向控制器注入ng-view指令,我看不出有什么问题。

<div ng-app="main">
   <ng-view></ng-view>
</div>

您的代码适用于this JSFiddle

在路由器配置中,从解析器功能注入orgTypes$routeProvider服务将解析程序作为 locals 注入控制器。该方法运行正常。

如果您使用ng-controller指令加载MainController,则会收到该错误。在这种情况下,$compile服务无法访问这些解析器。