2015-12-14 4 views
2

Быстро стучал головой по этой проблеме часами и не может найти решение на SO.Неизвестный поставщик: ServiceProvider <- Service <- Контроллер

У меня есть следующие:

//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 откуда. Я даже не знаю, где отлаживать это ... любые мысли?

+0

Может быть, вам не хватает массива '$ injection' для вашей функции' companyListPrepService'? – Phil

+0

Вам больше не следует использовать методы '$ http'' success' и 'error', они устарели. – Phil

ответ

3

Ваш код работает, как есть. Существует a working example, его часть AS IS. (это правда, что смесь строгой нотации не хорошо, мы должны использовать явное $inject = [...] везде - но это не проблема здесь)

Итак, что может быть проблема? Я бы сказал, что контроллер SeedPageController используется elswhere, в каком-то другом государстве, что делает НЕ содержать Решимость заявление:

resolve: { 
    //companyListPrepService : companyListPrepService 
}, 

Существует такое broken example с сообщением об ошибке испытали выше

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

+0

Просмотрел код и не нашел других случаев, когда' SeedPageController' является к сожалению, используется в других местах. – Dominooch

+0

Хорошо, что у вас есть мой плункер. Проверьте там, что ваш код работает там. Играйте с ... и он должен показать вам, где проблема в конце. Как только что доказано, ваш код работает;) Надеюсь, это поможет немного ... –

+0

Как насчет 'ng-controller'? – Phil

0

Я собираюсь угадать, что вы сокращаете свой код и как таковой, вам не хватает аннотации DI для вашей функции companyListPrepService. Попробуйте добавить

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; 
     }); 
    }] 
} 
+0

где в seed.config.js? Я попытался поместить его в 'moduleConfig()', 'companyListPrepService()' и вне 'moduleConfig()'. По-прежнему получается такая же ошибка. – Dominooch

+0

@ Dominooch в той же области, что и функция 'companyListPrepService' – Phil

+0

, по-прежнему получают ту же ошибку. 'companyListPrepService. $ inject = ['companyListService']; Функция компанииListPrepService (компанияListService) {...} ' – Dominooch

Смежные вопросы