全局设置Angular $资源配置

时间:2015-05-08 21:53:28

标签: angularjs angularjs-resource

根据以下示例,如何全局设置$resource超时和标头?我有许多$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'
            }
        })
    };
}

2 个答案:

答案 0 :(得分:2)

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

//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)
    };
}

答案 1 :(得分:0)

您可能在.value().constant()angular .module('myApp.constants') .constant("AppConstants", { "timeout" : 120000, "method" : "GET", .... // define your kv structure here }) 模块下拥有提供商。 Refer to this useful Gist解释并提供了所有不同提供商的示例代码。

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

document.onkeydown=function(e){
    if (e.keyCode === 65) {
        ...
    }
    ...
};

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