2013-11-11 4 views
0

Я изучаю Angularjs, и я пытаюсь создать службу для выполнения общих задач, которые необходимо выполнить для всех моих контроллеров.Angularjs Ошибка при попытке вызова метода из службы i определена

В настоящее время я получаю сообщение об ошибке:

TypeError: Cannot call method 'getAuthHeader' of undefined 

app.js

var token = "mytoken" 
var baseUrl = "mybaseUrl"; 

var myezteam = angular.module('myezteam', ['ui.bootstrap']); 

myapp.config(function($routeProvider) { 
    $routeProvider 
     .when('/profile', 
      { 
       controller: 'ProfileController', 
       templateUrl: 'template.html' 
      }) 
     .otherwise({redirectTo: '/profile'}); 
}); 

// This gets the basic information that is needed for every page 
myapp.service('base', function() { 

    this.getAuthHeader = function($http) { 
     // Set authorization token so we know the user has logged in. 
     return $http.defaults.headers.common.Authorization = 'Bearer ' + token; 
    } 
}); 

profile.js

myapp.controller('ProfileController', ['$scope', '$http', function($scope, $http, base) { 

     base.getAuthHeader($http); // <-- THIS LINE IS THROWING THE ERROR 
    }]); 

Почему возникающую ошибку и как я могу это исправить ? Кроме того, есть ли способ настроить конфигурацию в моем приложении, так что мне не нужно вызывать base.getAuthHeader($http); в каждом контроллере, но он будет автоматически вызван, когда каждый контроллер будет загружен?

+1

Почему вы передаете '$ http' вокруг, как это? Выглядит запутанным ... Dependency Injection работает и в сервисах. – elclanrs

+0

@elclanrs Можете ли вы уточнить? Я совершенно новый для AngularJS. – Catfish

ответ

2

Вы не вводите свою услугу base в свой контроллер. Вы должны вводить его в том же, как вы делали с $scope и $http

myapp.controller('ProfileController', ['$scope', '$http', 'base', 
    function($scope, $http, base) { ... }); 
+0

. Это привело к ошибке. У вас есть ответ на вторую часть моего вопроса? 'Есть способ настроить конфигурацию в моем приложении, так что мне не нужно вызывать base.getAuthHeader ($ http); в каждом контроллере, но он будет автоматически вызван, когда каждый контроллер будет загружен? ' – Catfish

+0

Вы хотите проверить, зарегистрирован ли пользователь и если он не перенаправляет их где-нибудь? –

+0

Да, но я еще так далеко не добрался. На данный момент мне просто интересно, могу ли я установить вызовы методов в конфиге или что-то в этом роде. – Catfish

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