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

Unknown provider: ServiceProvider <- Service <- Controller

几个小时以来我一直在思考这个问题,似乎找不到解决方案。

我有以下内容:

//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 端点末尾的对象,但是,我得到一个

Error: [$injector:unpr] Unknown provider: companyListPrepServiceProvider <- companyListPrepService <- SeedPageController.

我对 AngularJS 比较陌生,不知道 companyListPrepServiceProvider 的来源。我什至不知道在哪里调试...有什么想法吗?

我猜您是在缩小代码,因此您缺少 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;
        });
    }]
}

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

那么,可能是什么问题?我会说,控制器 SeedPageController 在其他地方使用,在其他一些状态下,NOT 包含解析语句:

resolve: {
  //companyListPrepService : companyListPrepService
},

上面有这样的broken example错误信息

Error: [$injector:unpr] Unknown provider: companyListPrepServiceProvider <- companyListPrepService <- SeedPageController