Restangular: TypeError: undefined не является функцией

Я пытаюсь играть с угловатыми и нерегулярными. У меня проблемы с использованием restangular, поскольку он дает мне ошибку:

TypeError: undefined is not a function
 at Object.login (localhost:8000/src/common/factories/session.js:110:38)
 at localhost:8000/src/common/factories/session.js:207:34
 at Scope.$emit (localhost:8000/vendor/angular/angular.js:12809:33)
 at Scope.$scope.Login (localhost:8000/src/common/factories/session.js:185:28)
 at localhost8000/vendor/angular/angular.js:10735:21
 at localhost:8000/vendor/angular/angular.js:18942:17
 at Scope.$eval (localhost:8000/vendor/angular/angular.js:12595:28)
 at Scope.$apply (localhost:8000/vendor/angular/angular.js:12693:23)
 at Scope.$delegate.__proto__.$apply (<anonymous>:855:30)
 at HTMLButtonElement.<anonymous> 
</anonymous></anonymous>

(Локальный: 8000/продавца/угловой /angular.js: 18941: 21)

Мой контроллер находится здесь: https://github.com/Seraf/LISA-WEB-Frontend/blob/master/src/common/factories/session.js#L188 и вызывая функцию входа (строка и pos в приведенной выше ошибке)

Здесь, кажется, он плохо играет с Restangular, поскольку у меня есть ошибка, вставленная выше. Поскольку я новичок в angularjs, возможно, я не делаю лучших практик... Я уже добавляю реляционную форму в зависимости от моего корневого модуля: https://github.com/Seraf/LISA-WEB-Frontend/blob/master/src/app/app.js#L6 возможно, это вызывает некоторые проблемы?

[EDIT] Виновные строки:

110: ".setBaseUrl('backend/api/v1')"

207: "$ Session.login (данные)";

Код вины:

angular.module("SessionManager", ['http-auth-interceptor','restangular'])
 .constant('constSessionExpiry', 20) // in minutes
 .factory("$Session", [
 '$rootScope',
 '$q',
 '$location',
 '$log',
 '$http',
 'constSessionExpiry',


 function($rootScope, $q, $location, $log, $http, Restangular, authService, constSessionExpiry) {
 return {
 login: function(data){
 $log.info("Preparing Login Data", data);
 var $this = this;
 return Restangular
 .setBaseUrl('backend/api/v1')
 .all('user/login/')
 .post(data)
 .then(function userLoginSuccess(response){
 $log.info("login.post: auth-success", response);
 $this.User = response;
 // remove properties we don't need.
 delete $this.User.route;
 delete $this.User.restangularCollection;
 $this.User.is_authenticated = true;
 $this.cacheUser();
 $this.setApiKeyAuthHeader();
 $this.authSuccess();
 }, function userLoginFailed(response){
 $log.info('login.post: auth-failed', response);
 $this.logout();
 return $q.reject(response);
 });
 },
 };
 }])

Спасибо за помощь !

1 ответ

У вас неправильная инъекция зависимостей:

.factory("$Session", [
 '$rootScope','$q','$location','$log','$http','constSessionExpiry',
 function($rootScope, $q, $location, $log, $http, Restangular, authService, constSessionExpiry) {

Вы constSessionExpiry как Restangular и ничего для последних двух сервисов.

Это означает, что вызов Restangular.setBaseUrl фактически ищет 20.setBaseUrl который является неопределенным, а не функцией - следовательно, ошибка!

Чтобы перейти к исправлению, убедитесь, что вы передаете правильные имена служб в соответствии с вашими аргументами функции, например:

.factory("$Session", [
 '$rootScope','$q','$location','$log','$http','Restangular','authService','constSessionExpiry',
 function($rootScope, $q, $location, $log, $http, Restangular, authService, constSessionExpiry) {

licensed under cc by-sa 3.0 with attribution.