Глобальная настройка Angular $resource Config

Основываясь на следующем примере, как я могу установить тайм-аут $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'
            }
        })
    };
}

person Matt Riley    schedule 08.05.2015    source источник


Ответы (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)
    };
}
person Tyler    schedule 08.05.2015

У вас может быть провайдер в модуле .config(), .value() или .constant(). Обратитесь к этому полезному Gist, в котором объясняется и приводится пример кода для всех различных поставщиков.

для простоты это пример .constant():

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

Итак, теперь вы можете внедрить его в функцию вашего модуля. Надеюсь это поможет.

person daxeh    schedule 08.05.2015