角度:集中资源工厂与承诺

时间:2014-09-10 20:05:05

标签: javascript angularjs design-patterns angularjs-scope promise

我们说我的资源看起来像这样:

angular.module('productsModule').factory('productFactory', function($resource) {
    return $resource('/products/:id',{},
    {'query': {method: 'GET', isArray: false }});
});

现在我可以在像这样的控制器中使用它:

productFactory.query().$promise.then(function(products) {
    // success
    console.log(products);
    $scope.products = products;
});

但是,我想将这个功能移到工厂,以便我可以在任何控制器中执行此操作,它会在保持承诺的同时获得产品列表:

$scope.products = productFactory.products 

这样我可以拥有一个集中的可重用资源。我如何在Angular中实现这一目标?

2 个答案:

答案 0 :(得分:1)

你实际上可以使用ngResource执行此操作,而本机承诺不再需要解包,您只需执行此操作:

 $scope.products = productFactory.query();

这是因为对ngResource执行.query将返回一个空数组,当请求返回给客户端并运行摘要时,该数组将自动流行。

答案 1 :(得分:0)

angular.module('productsModule').factory('productFactory', function($resource) {
    var res = $resource('/products/:id',{},
               {'query': {method: 'GET', isArray: false }});
    var fn = function ($scope, prop) {
        res.query().$promise.then(function (products) {
            $scope[prop] = products;
        }
    }

    return fn;
});

在控制器中:

productFactory($scope, 'products');