3
集中资源工厂

比方说,我有一个看起来像这样的资源:角:与承诺

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中实现这一点?

+0

我不知道你想达到什么。 '$ scope.products = productFactory.query()'怎么样? – zeroflagL 2014-09-10 20:33:02

回答

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'); 
1

你其实可以与ngResource做到这一点,而原生的承诺不再解开,你可以简单地做:

$scope.products = productFactory.query(); 

这是因为这样做ngResource上的.query将返回一个空数组,当请求返回给客户端并运行摘要时,该数组将自动受欢迎。