2016-12-22 8 views
0

私はサービスから得た配列を持っていますが、コントローラではforEach()関数で空の値を取得します。これはcodeです。

コントローラここ

、 '製品' と 'copyProducts' の両方が空です。私はforEach()関数に 'copyProducts'配列で作業する必要があります。

app.controller("controllerApp", function($scope, serviceApp){ 

    var products = serviceApp.query(); 
    $scope.copyProducts = products; 

    angular.forEach($scope.copyProducts, function(value, key){ 
    console.log("object: "+value); 
    }) 

}); 

サービス

app.factory("serviceApp", function($resource){ 
    return $resource("products.json", {}, { 
     getAll: { 
      method: "GET", 
      isArray: true 
     } 
    }) 
}) 

答えて

6

それはすぐに終了しないと結果が同期次の行の準備ができていないので、.query()が非同期であるので、あなたのコードが間違っています。そのため、コールバック関数が必要になります。ところで

serviceApp.query({}, function(res, headers){ 
    //etc 
}); 

あなたがあなたのリソースに定義されているgetAllメソッドを使用したい場合は、その後、あなたは(クエリを使用していないでしょう)

serviceApp.getAll().$promise.then(function(res){}).....etc 

serviceApp.query().$promise.then(function(res) { 
    $scope.products = res; 
    $scope.copyProducts = res; 
    angular.forEach($scope.copyProducts, function(item) { 
    console.log(item) 
    }) 
}); 

代替に

+2

なぜそれが間違っているのかを指摘するだけですが、.query()は非同期なので即座に終了しないため、一度作業が完了すると呼び出すコールバック関数が必要です。また、エラー処理関数も含めるようにしてください($ qProviderはこれがないとデフォルトでエラーになります) – shaunhusain

関連する問題