angularjs $ resource非回调模式不起作用

时间:2014-01-17 07:03:34

标签: angularjs angularjs-resource angularjs-factory

我发现来自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而不是整个返回的数据(就像我在第一个代码示例的注释部分中所做的那样 返回数据。内容 )。那么我能做出的任何想法都有效吗?

如果有一些jsfiddle例子会很棒。 感谢

1 个答案:

答案 0 :(得分:1)

试试这个

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

但是在您的控制器中,您需要知道何时从远程调用返回数据,您可以通过specialProducts数组查看。

更新:最好使用promises,但在这种情况下

$scope.specialProducts = specialProductFactory.getFeatureProducts();

将来会填充数组。要知道何时需要观看

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

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