2015-04-15 4 views
1

Я следую руководству Angular Style от John Papa для создания небольшого приложения, и я не могу решить проблему с помощью controller, используя метод от service .. .ТипError: Не удается прочитать свойство getAccounts of undefined

модуль

(function() { 
    'use strict'; 
    var accountsApp = angular.module('accountsApp', ['ui.bootstrap', 'ngAnimate']); 
})(); 

контроллер

(function() { 
    'use strict'; 

    angular 
     .module('accountsApp') 
     .controller('accountsCtrl', accountsCtrl); 

    accountsCtrl.$inject = ['$log']; 

    function accountsCtrl($log, accountsDataSvc) { 
     /* jshint validthis:true */ 
     var vm = this; 
     vm.title = 'Accounts'; 
     vm.accounts = []; 
     vm.accountForm = null; 
     vm.account = { id: 0, name: '', description: '' } 

     activate(); 

     function activate() { 
      return getAccounts(1).then(function() { 
       $log.info('Accounts loaded'); 
      }); 
     } 

     function getAccounts(id) { 
      return accountsDataSvc.getAccounts(id).then(function(data) { //error here 
       vm.accounts = data; 
       return vm.accounts; 
      }); 
     } 
    } 
})(); 

служба

(function() { 
    'use strict'; 

    angular 
     .module('accountsApp') 
     .factory('accountsDataSvc', accountsDataSvc); 

    accountsDataSvc.$inject = ['$http', '$log']; 

    function accountsDataSvc($http, $log, $q) { 

     var uri = '***'; 

     var service = { 
      getAccounts: accounts 
     }; 

     return service; 

     ////////////////////// 

     function accounts(userId) { 
      $log.info(uri + userId + ' called'); 
      return $http.get(uri + userId) 
       .then(getAccountsComplete) 
       .catch(function (message) { 
        $log.error('XHR Failed for getAccounts ' + message); 
       }); 

      function getAccountsComplete(data, status, headers, config) { 
       return data.data[0].data.results; 
      } 
     } 
    } 
})(); 

При запуске приложения, я получаю ошибку TypeError: Не удается прочитать свойство «getAccounts» неопределенного внутри контроллера, но я не могу видеть, куда я пошел неправильно - любая помощь будет высоко оценена.

ответ

5

Похоже, что вы забыли внедрить accountsDataSvc в контроллер

Try:

accountsCtrl.$inject = ['$log', 'accountsDataSvc']; 
+1

Мэтт, спасибо за это - я думал, что только нужно, чтобы ввести угловую конкретные зависимости здесь, Угловое Newb ошибка - Я соглашусь, когда SO позволит мне. – christiandev

+1

Я тоже новичок. Всякий раз, когда появляется такая ошибка, я проверяю две вещи: 1) Injection Dependency, я сообщил своему контроллеру обо всех сервисах, от которых это зависит; 2) Мой файл index.html, я ссылаюсь на все необходимые .js-файлы. – MattDionis

+0

Да, я буду следовать тем же двум шагам :) - приветствия. – christiandev

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