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

、必要な手順を経ることができますanglejsで何かが期待どおりに動いていないときに行うこと。

まず、コンソールを確認します。 asyncの親オブジェクトが定義されていない、とあなたのコードの迅速な視聴をお使いのコントローラでpanelServiceを注入するのを忘れたことを明らかにしただろう、なぜあなたが考えて取得する必要 TypeError: Cannot read property 'async' of undefined ...

:次のようなエラーに何かを取得する必要があります。

関連する問題