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將返回一個空數組,當請求返回給客戶端並運行摘要時,該數組將自動受歡迎。