0

angularjs Web サイトのドキュメントには、工場で次のようなことができると書かれていることがわかりました。

 var speicialProducts = [];

 factory.getFeatureProducts = function () {
    if ($.isEmptyObject(specialProducts)) {
        specialProducts = $resource('index.php/products/featureProducts').query().$promise.then(function(data){
            return data;
            // return data.content;
        });
    }
    return specialProducts;
}

そして、コントローラーで次のことを行います。

$scope.specialProducts = specialProductFactory.getFeatureProducts();

しかし、どういうわけか、データが正しく返されたときに angularjs がスコープ モデルを埋めません。

私はやろうとしました:

var speicialProducts = [];

 factory.getFeatureProducts = function () {
    if ($.isEmptyObject(specialProducts)) {
        specialProducts = $resource('index.php/products/featureProducts').query();
    }
    return specialProducts;
} 

これは機能していますが、返されたデータ全体ではなく、返されたデータの一部を specialProducts に割り当てるために何かをしたいと考えています (最初のコード例return data.contentのコメント部分で行ったように)。それで、これを機能させることができるアイデアはありますか?

素晴らしいjsfiddleの例がいくつかあれば。ありがとう

4

1 に答える 1

1

これを試して

 if ($.isEmptyObject(specialProducts)) {
        $resource('index.php/products/featureProducts').query().$promise.then(function(data){
            angular.foreach(data,function(item) {
                 specialProducts.push(item);
            });
        });
    }

specialProductsただし、コントローラーでは、配列を監視できるリモート呼び出しからデータがいつ返されたかを知る必要があります。

更新:約束を使用する方が良いでしょうが、この場合

$scope.specialProducts = specialProductFactory.getFeatureProducts();

将来的に配列を埋めます。いつ視聴する必要があるかを知るには

$scope.$watchCollection("specialProducts",function(data) { //Called when data updated});

thenpromise ベースの API を使用し、メソッドを使用して非同期応答を処理することを強くお勧めします。

于 2014-01-17T07:14:00.457 に答える