2017-06-22 94 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