Q:

Setting Angular $resource Config Globally

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

A:

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

