3

Не может показаться, что эта фабрика работает правильно. Я пытаюсь выполнить $ http-запросы с завода. Но я получаю эту ошибку:

TypeError: PassFactory.setNewPass не является функцией

Ниже код:

завод
PassFactory.setNewPass не является функцией, заводская функция не является функцией

(function() { 
     angular 
      .module("myApp") 
      .factory('PassFactory', ['$http', function ($http) { 
    /* 
       var passFactory = {}; 
       passFactory.setNewPass = function (newpass, user) { 
        return $http.post('/password/' + newpass, user, function (response) { 
        }); 
       }; 
    */ 
       return { 
        setNewPass: function (newpass, user) { 
         return $http.post('/password/' + newpass, user, function (response) { 
         }); 
        } 
       }; 
      }]) 
    })(); 



Контроллер

(function() { 
     angular 
      .module("myApp") 
      .controller('PCtrl', ['$scope', '$location', '$rootScope', 'PassFactory', setHome]); 

     function setHome($scope, $location, PassFactory) { 
      $scope.login = function (user) { 
       if (user.newpassword == user.newpasswordconfirm) { 


        PassFactory.setNewPass(user.newpassword, user).then(function (response) { 
         $location.path("/"); 
        }); 


       } 
      }; 
     } 
    })(); 

ответ

1

Вы пропустили $rootScope в функции контроллера. Всегда следите за тем, чтобы порядок в зависимости был введен внутри массива DI, в той же последовательности вы должны запросить их экземпляр внутри своей заводской функции.

angular 
.module("myApp") 
.controller('PCtrl', ['$scope', '$location', '$rootScope', 'PassFactory', setHome]); 

//added $rootScope in 3rd place 
function setHome($scope, $location, $rootScope, PassFactory) { 
+0

Большое вам спасибо! Это решило мою проблему. –