2016-10-04 160 views
2

angular.js:13708 TypeError: reservationService.getPendingReservations is not a functionTypeError:reservationService.getPendingReservations不是函數

當我第一次加載頁面時,我得到這個錯誤,但給F5的頁面,加載順利。

下面我顯示我的代碼。我找不到錯誤。我一直在檢查一些論壇,表明它可能與依賴注入有關,但仍然無法找到錯誤。我做了一個測試,我意識到當第一次加載頁面時,工廠是未初始化的,如果這與此無關。

homeController.js

'use strict'; 
app.controller('homeController', ['$scope', '$route', '$location', 'authService', 'reservationService', 'localStorageService', 
    function ($scope, $route, $location, authService, reservationService, localStorageService) { 


    $scope.showNotifications = function() { 
     updateNotifications(); 
     $("#notificationContainer").fadeToggle(600); 
     //hideCountNotifications(); 
    } 


function updateNotifications() { 

     reservationService.getPendingReservations(authData.id_place).then(function (results) { 
      if (results.status != 200) { 
       $scope.message = "Upps! Lo siento, creo que tenemos un problema al cargar las notificaciones."; 
       console.log(results); 
      } 
      else { 
       $scope.notifications = results.data; 
       $scope.cantPendingReservations = results.data.length; 

       //// La primera vez que carga la pagina se llamada el metodo para que recargue la grilla 
       //reloadGrid(); 
      } 
      //$scope.$emit('UNLOAD') 
      //$("#tableScheduler").show(); 

     }, function (error) { 
      if (error.status == 401) { authService.logOut(); $location.path('/login'); } 
     }); 
    } 


}]); 

reservationService.js

'use strict'; 
app.factory('reservationService', ['$http', '$q', 'localStorageService', 'servicesConnect', function ($http, $q, localStorageService, servicesConnect) { 

    var serviceBase = servicesConnect.apiFutbolPlay; 
    var reservationService = {}; 

    var authData = localStorageService.get('authorizationData'); 
    if (authData) { 
     var _ListPitch = function (id_place) { 
      var deferred = $q.defer(); 
      $http.get(serviceBase + 'api/pitches/single/' + id_place).then(function (results) { 
       deferred.resolve(results); 
      }, function errorCallback(err, status) { 
       deferred.reject(err); 
      }); 
      return deferred.promise; 
     } 

     var _ListPendingReservations = function (id_place) { 
      var deferred = $q.defer(); 
      $http.get(serviceBase + 'api/reservations/customer/myreservations/' + id_place, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }).then(function (results) { 
       deferred.resolve(results); 
      }, function errorCallback(err, status) { 
       deferred.reject(err); 
      }); 
      return deferred.promise; 
     } 


     reservationService.getPendingReservations = _ListPendingReservations; 
    } 

    return reservationService; 

}]); 

的index.html

<!DOCTYPE html> 
<html data-ng-app="FutPlayApp"> 
<head> 
    <meta name="msapplication-TileColor" content="#ffffff"> 
    <meta name="msapplication-TileImage" content="images/favicon/ms-icon-144x144.png"> 
    <meta name="theme-color" content="#ffffff"> 
</head> 
<body> 
    <div class="container" data-ng-controller="homeController"> 
     <div data-ng-view=""> 


     </div>   

     <div class="clearfix"></div> 
    </div> 

    <!-- Jquery --> 
    <script src="scripts/jquery-2.2.4.min.js"></script> 
    <!-- Bootstrap --> 
    <script src="scripts/bootstrap.min.js"></script> 
    <!-- Load Angular --> 
    <script src="scripts/angular.min.js"></script> 
    <script src="scripts/angular-route.min.js"></script> 
    <script src="scripts/loading-bar.min.js"></script> 
    <script src="scripts/angular-local-storage.min.js"></script> 
    <script src="scripts/moment.js"></script> 
    <script src="scripts/moment-timezone-with-data.js"></script> 
    <script src="scripts/datetimepicker.js"></script> 
    <script src="scripts/datetimepicker.templates.js"></script> 
    <script src="scripts/dateTimeInput.js"></script> 
    <!--Autocompletado--> 
    <script src="scripts/angucomplete-alt.js"></script> 
    <!-- Load app main script --> 
    <script src="app/app.js"></script> 
    <!-- Notificaciones de reservas de usuario --> 
    <script type="text/javascript" src="scripts/pnotify.custom.min.js"></script> 
    <!-- Load services --> 
    <script src="app/services/authInterceptorService.js"></script> 
    <script src="app/services/authService.js"></script> 
    <script src="app/services/reservationService.js"></script> 
    <script src="app/services/schedulerService.js"></script> 
    <script src="app/services/profileService.js"></script> 
    <script src="app/services/changepasswordService.js"></script> 
    <script src="app/services/reservationmultipleService.js"></script> 

    <!-- Load controllers --> 
    <script src="app/controllers/loginController.js"></script> 
    <script src="app/controllers/reservationController.js"></script> 
    <script src="app/controllers/homeController.js"></script> 
    <script src="app/controllers/schedulerController.js"></script> 
    <script src="app/controllers/profileController.js"></script> 
    <script src="app/controllers/changepasswordController.js"></script> 
    <script src="app/controllers/reservationmultipleController.js"></script> 
</body> 
</html> 

回答

1

出現錯誤的原因是reservationService.getPendingReservations僅在本地存儲中存在'authorizationData'時才被初始化。如果沒有,那麼getPendingReservations從不設置任何東西。

我的猜測是,在您的代碼中的其他地方,authorizationData存儲在本地存儲中,以便當您刷新頁面時,該功能變爲可用。

要解決此問題,您需要重構預訂服務以處理尚未發生授權的情況,或在嘗試使用getPendingReservations之前執行檢查。

+0

馬特,的確,非常感謝!你很友好。 – Al3mor

+0

我想感謝你的回答,但我沒有最低15分這樣做。但我運行你的解決方案。來自哥倫比亞的問候。 – Al3mor

+0

您應該能夠將其標記爲正確。 –