angular:有承诺的集中资源工厂

angular: centralised resource factory with promises

本文关键字:集中 资源 工厂 承诺 angular      更新时间:2023-09-26

假设我有一个资源,如下所示:

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

实际上可以用ngResource来实现这一点,而本机承诺不再打开,您可以简单地执行:

 $scope.products = productFactory.query();

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

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