2015-05-08 103 views
1

根据以下示例,我如何在全局范围内设置$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

定义配置对象作为一个常量,那么你可以把它注射到每个需要的服务,并覆盖特定于该服务的任何属性。

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

你可能有下.config().value().constant()模块提供商。 Refer to this useful Gist,它解释并提供了所有不同提供者的示例代码。

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

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

所以现在你可以在你的模块功能注入它。 希望这有助于。