2016-02-10 3 views
1

В AngularJS У меня есть контроллер следующим образом:AngularJS - XX не является функцией

function LoginController($scope, $rootScope, $location, $cookieStore, UserService) { 

    $scope.rememberMe = false; 

    $scope.login = function() { 
     UserService.authenticate($.param({ 
      username: $scope.username, 
      password: $scope.password 
     }), function(authenticationResult) { 
      var authToken = authenticationResult.token; 
      $rootScope.authToken = authToken; 
      if ($scope.rememberMe) { 
       $cookieStore.put('authToken', authToken); 
      } 
      UserService.get(function(user) { 
       $rootScope.user = user; 
       $location.path("/"); 
      }); 
     }); 
    }; 

    $scope.register = function() { 
     UserService.register($.param({ 
      username: $scope.username, 
      password: $scope.password 
     }), function(authenticationResult) { 

     }); 
    }; 
}; 

и сервис завода:

var services = angular.module('exampleApp.services', ['ngResource']); 

services.factory('UserService', function($resource) { 
    return $resource('rest/user/:action', {}, { 
     authenticate: { 
      method: 'POST', 
      params: { 
       'action': 'authenticate' 
      }, 
      headers: { 
       'Content-Type': 'application/x-www-form-urlencoded' 
      } 
     } 
    }, { 
     register: { 
      method: 'POST', 
      params: { 
       'action': 'register' 
      }, 
      headers: { 
       'Content-Type': 'application/x-www-form-urlencoded' 
      } 
     } 
    }); 
}); 

Когда я пытаюсь достигнуть зарегистрировать функцию в браузере я получаю TypeError: UserService.register is not a function Что мне не хватает?

Я прочитал это сообщение: Angular - TypeError: XX is not a function, который кажется похожим, но я его не понимаю.

ответ

3

Ответ, на который вы ссылаетесь (это только мое), что очень отличается от того, что вы ищете.

У вас неправильный формат ресурса $ resource, пользовательский метод $ resource должен находиться в одном объекте, а не отдельно.

Код

services.factory('UserService', function($resource) { 
    return $resource('rest/user/:action', {}, { 
    authenticate: { 
     method: 'POST', 
     params: { 
     'action': 'authenticate' 
     }, 
     headers: { 
     'Content-Type': 'application/x-www-form-urlencoded' 
     } 
    }, 
    register: { 
     method: 'POST', 
     params: { 
     'action': 'register' 
     }, 
     headers: { 
     'Content-Type': 'application/x-www-form-urlencoded' 
     } 
    } 
    }); 
}); 
+0

Это работает! Спасибо за помощь! – Araneo

+0

@Araneo Рад узнать, что .. Спасибо :) –

+0

@Araneo пойти вперед и отметить ответ как правильный .., это помогло вам. Спасибо :) –

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