2017-06-22 93 views
-2

我想從我的數據庫使用AngularJS加載一些數據。 我有一個應該得到數據的服務和一個使用它的控制器。AngularJS服務不返回承諾

見下面我的代碼:

angular.module('myApp') 
    .factory('panelService', ['$http', function ($http) { 

     return { 
      async: function() { 
       return $http.get('/test'); // this returns promise 
      } 
     }; 

    }]); 


angular.module('myApp') 
    .controller('panelCtrl', ['$scope', '$http', function ($scope, $http) { 

     var promise = panelService.async() 
     promise.then(
      function(payload){ 
       $scope.user = payload.data; 
      } 
     ) 

}]); 

可惜,這是行不通的。沒有數據被加載,我沒有看到任何JSON對象到達瀏覽器。但是,如果我在我的控制器中將panelService.async()替換爲$http.get('/test'),它可以正常工作。所以我的猜測是我的服務有錯誤或者沒有正確調用。

回答

2

的soulution是注入服務到控制器這樣的:

angular.module('myApp') 
    .controller('panelCtrl', ['$scope', '$http', 'panelService', function ($scope, $http, panelService) { 

     var promise = panelService.async() 
     promise.then(
      function(payload){ 
       $scope.user = payload.data; 
      } 
     ) 

}]); 
3

爲了讓您瞭解問題以及如何通過自己接下來的時間來修復它,讓我們去通過你所需要的步驟當angularjs中的某些事情沒有像預期的那樣工作時。

首先,檢查控制檯。你應該得到的錯誤是這樣的: TypeError: Cannot read property 'async' of undefined ...

這應該讓你思考爲什麼async父對象是不確定的,和你的代碼的快速查看就會發現,你忘了你的控制器注入panelService