0

の内側に私はAngularJSでこのサービスを持っています。私は、サービスを消費するために以下のメソッドを使用します。このコードは正常に動作します

$scope.getProducts = function() 
{ 
    auth.getSiteInfo().then(function(resp) 
    { 
     auth.getProductsSiteService(resp.data.idSite).then(function(response) 
     { 
      var json = angular.fromJson(response.data.Respuesta); 
      $scope.products = json.Table; 
     }); 
    }); 
}; 

、私はng-repeatディレクティブを含むHTML temnplateに$scope.productsのデータを表示するが、私はこの問題を抱えています。 同じコントローラの他のメソッドで$scope.productsを使用する場合は、常に空です。私は$scope.getProducts()メソッドを呼び出し、それ以降はconsole.log($scope.products)を使用し、それは常に[]です。 私はそれが$scope.productsが約束の問題を解決するために.thenを使用するサービスの内部にあるため、テストしました。

誰もがこの問題を解決する方法を知っていますか?コントローラの他の方法では$scope.productsを使用する必要があります。

+2

。あなたは '$ scope.getProducts'で約束を返すことができ、' $ scope.prodcuts'にデータが – taguenizy

+0

であることを確認するために 'then'を使用します。ここでconsole.log($ scope.products)を呼び出していますか? $ scope.getProductsの呼び出しの直後ですか? – user449689

+1

はい、私はそれが問題だと思います、約束はまだ解決していません。コメントありがとう。 –

答えて

0

サービスがサイト情報を取得して保存するようにします。それから、製品を手に入れて保管しましょう。次に、コントローラから製品を尋ねてください。このメソッドは、プロダクトがまだ要求されていないときに、プロダクトを非同期に要求するように約束を返すことができます。

だから、のようなもの:おそらくあなたは約束が解決する前に `$ scope.products`をアセスしようとしている

 
    this.getProductsSiteService = function() { 
     if (products) return $q.when(products); 
     //do your http request here based on previously stored site id 
     return $http.get(BASE_URL + 'obtener/productos/sitio/'+idSite).then(
     function(response) { 
      var json = angular.fromJson(response.data.Respuesta); 
      products = json.TABLE; 
      return products; 
     } 
    ) 

    }