全局设置 Angular $resource 配置

Setting Angular $resource Config Globally

根据以下示例,如何全局设置 $resource 超时和 headers?我有许多 $resource 定义,如下所示,但我不想为每个定义重复基本配置。

angular
    .module('myApp.services')
    .factory('myServices', myServices);

myServices.$inject = ['$resource'];

function myServices($resource) {
    return {
        serviceA: $resource('/api/serviceA', {
            serviceA_paramA: '@serviceA_valueA',
            serviceA_paramB: '@serviceA_valueB'
        }, {
            'get': {
                method: 'GET',
                timeout: 120000
            }
        }, {
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json'
            }
        }),
        serviceB: $resource('/api/serviceB', {
            serviceB_paramA: '@serviceB_valueA',
            serviceB_paramB: '@serviceB_valueB'
        }, {
            'get': {
                method: 'GET',
                timeout: 120000
            }
        }, {
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json'
            }
        })
    };
}

将您的配置对象定义为常量,然后您可以将其注入到需要它的每个服务中,并覆盖该服务特定的任何属性。

//Constant
angular.module('myApp')
  .constant('serviceConfigObject',
    {
      'get': {
        method: 'GET',
        timeout: 120000
      }
    }, {
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
      }
    })

// Service
angular
    .module('myApp.services')
    .factory('myServices', myServices);

myServices.$inject = ['$resource', 'serviceConfigObject'];

function myServices($resource, serviceConfigObject) {
    return {
        serviceA: $resource('/api/serviceA', {
            serviceA_paramA: '@serviceA_valueA',
            serviceA_paramB: '@serviceA_valueB'
        }, serviceConfigObject),
        serviceB: $resource('/api/serviceB', {
            serviceB_paramA: '@serviceB_valueA',
            serviceB_paramB: '@serviceB_valueB'
        }, serviceConfigObject)
    };
}

您可能在 .config().value().constant() 模块下有一个提供商。 Refer to this useful Gist 其中解释并提供了所有不同提供商的示例代码。

为简单起见,这是 .constant() 示例:

angular
    .module('myApp.constants')
    .constant("AppConstants", {
       "timeout" : 120000,
       "method"  : "GET",
       ....
       // define your kv structure here
    })

所以现在你可以将它注入到你的模块函数中了。 希望这有帮助。