0

我发现来自 angularjs 网站的文档说我可以在我的工厂做这样的事情:

 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});

我强烈建议您使用基于 Promise 的 API 并使用这些then方法来处理异步响应。

于 2014-01-17T07:14:00.457 回答