2016-03-09 2 views
3

Я пытаюсь вызвать функцию из службы в контроллере, но я получаю сообщение о том, что вещь, которую я вызываю, не является функцией. Я новичок в AngularJS, поэтому я не совсем уверен, что я делаю неправильно. Итак, каков правильный способ вызова сервисной функции в контроллере?Как вызвать служебную функцию в контроллере с помощью AngularJS?

Я пытаюсь вызвать getCurrentUserInfo в ProfileCtrl

.service('AuthService', function($http, Backand){  
    function getCurrentUserInfo() { 
     return $http({ 
      method: 'GET', 
      url: baseUrl + "users", 
      params: { 
       filter: JSON.stringify([{ 
        fieldName: "email", 
        operator: "contains", 
        value: self.currentUser.name 
       }]) 
      } 
     }).then(function (response) { 
      if (response.data && response.data.data && response.data.data.length == 1) 
       return response.data.data[0]; 
     }); 
    } 
}) 

.controller('ProfileCtrl', ['$scope', '$ionicSideMenuDelegate', 'AuthService', function($scope, $ionicSideMenuDelegate, AuthService) { 

    AuthService.getCurrentUserInfo().then(function(response){ 
    $scope.user = response.data.data; 
}); 

// function getCurrentUserInfo() { 
// AuthService.getCurrentUserInfo() 
// .then(function (result) { 
//  $scope.user = result.data; 
// }); 
// } 

}]) 
+0

Вы включили все js-файлы на страницу index.html? – Sherlock

+1

http://fdietz.github.io/recipes-with-angular-js/controllers/sharing-code-between-controllers-using-services.html –

ответ

5

Вы должны сделать это свойство this.

.service('AuthService', function($http, Backand){  
     this.getCurrentUserInfo = function() { 
      return $http({ 
       method: 'GET', 
       url: baseUrl + "users", 
       params: { 
        filter: JSON.stringify([{ 
         fieldName: "email", 
         operator: "contains", 
         value: self.currentUser.name 
        }]) 
       } 
      }).then(function (response) { 
       if (response.data && response.data.data && response.data.data.length == 1) 
        return response.data.data[0]; 
      }); 
     } 
    }) 

Затем в контроллере

AuthService.getCurrentUserInfo(whatEverYourParamsAre) 

Edit: На самом деле, позвольте мне представить немного контекста. Угловая применяет функцию new к каждому .service(....), который вы включаете в свой контроллер. Как мы знаем, вызов this.aFunction в функции конструктора вызывает оператор new в javascript для обработки функции aFunction как свойства объекта, возвращаемого конструктором.

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