Setting Angular $resource Config Globally

2019-06-06 02:47发布

Based on the following sample, how can I set the $resource timeout and headers globally? I have a number of $resource definitions like the following but I’d prefer to not repeat the basic config for each.

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条回答
smile是对你的礼貌
2楼-- · 2019-06-06 03:16

Define your configuration object as a constant, then you can inject it into each service that needs it, and overwrite any properties that are specific to that service.

//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)
    };
}
查看更多
Evening l夕情丶
3楼-- · 2019-06-06 03:23

You may have a provider under .config(), .value() or .constant() module. Refer to this useful Gist which explains and provides sample code for all the different providers.

for simplicity, this is the .constant() example:

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

So now you can inject it in your module function. Hope this helps.

查看更多
登录 后发表回答