未知提供者:ServiceProvider< - Service< - Controller

时间:2015-12-14 05:01:43

标签: angularjs angular-ui-router angular-ui state

现在几个小时以来我一直在讨论这个问题,似乎无法在SO上找到解决方案。

我有以下内容:

//controller.js
(function() {
'use strict';

angular
    .module('seed-module')
    .controller('SeedPageController', SeedPageController);

SeedPageController.$inject = ['companyListPrepService', 'logger'];

function SeedPageController(companyListPrepService) {
    var vm = this;
    vm.companies = companyListPrepService;
    console.log(vm.companies.data);

}

angular
    .module('seed-module')
    .factory('companyListService', companyListService);

companyListService.$inject = ['$http', 'logger'];

function companyListService($http, logger) {
    return {
        getCompanies: getCompanies
    };


    function getCompanies() {
        return $http.get('/companies.json')
            .success(function (data) {
                return data;
        })
            .error(function (error) {
                logger.error('XHR Failed for .' + error);
        });


    }
}

对于我的路线:

//seed.config.js
(function() {
'use strict';

angular
    .module('seed-module')
    .config(moduleConfig);

/* @ngInject */
function moduleConfig($translatePartialLoaderProvider, $stateProvider, triMenuProvider) {
    $translatePartialLoaderProvider.addPart('app/seed-module');

    $stateProvider
    .state('triangular.admin-default.seed-page', {
        resolve: {
        companyListPrepService : companyListPrepService
        },
        url: '/seed-module/seed-page',
        templateUrl: 'app/seed-module/seed-page.tmpl.html',
        // set the controller to load for this page
        controller: 'SeedPageController',
        controllerAs: 'vm'
    });
}

function companyListPrepService(companyListService) {
    return companyListService.getCompanies();
}
})();

我的console.log(vm.companies.data);在我的REST端点结束时给出了对象,但是,我得到了一个

  

错误:[$ injector:unpr]未知提供者:companyListPrepServiceProvider< - companyListPrepService< - SeedPageController。

我对AngularJS相对较新,并且不知道companyListPrepServiceProvider来自哪里。我甚至不知道在哪里调试这个......有什么想法吗?

2 个答案:

答案 0 :(得分:3)

您的代码按原样运行。有a working example,其中一部分是AS。 (确实,严格符号的混合不好,我们应该在任何地方使用明确的$inject = [...] - 但这不是问题)

那么,问题可能是什么?我会说,控制器SeedPageController用于elswhere,在某些其他状态, NOT 包含resolve语句:

resolve: {
  //companyListPrepService : companyListPrepService
},

上面有错误消息的broken example

  

错误:[$ injector:unpr]未知提供者:companyListPrepServiceProvider< - companyListPrepService< - SeedPageController

答案 1 :(得分:0)

我猜你是否正在缩小你的代码,因此,你错过了companyListPrepService函数的DI注释。尝试添加

companyListPrepService.$inject = ['companyListService'];

seed.config.js

或者,尝试使用数组注释函数

resolve: {
    companyListPrepService: ['companyListService', function(companyListService) {
        return companyListService.getCompanies().then(function(response) {
            // as mentioned in comments, stop using "success"
            return response.data;
        });
    }]
}