cómo establecer encabezados personalizados con una acción $ recurso?

con $ http, podemos hacer esto:

var config = { headers: { 'something': 'anything' } }; $http.get('url/to/json', config) .success(function() { // do something… }) 

Me gustaría hacer lo mismo con una referencia de $ recursos (no funciona):

 var config = { headers: { 'something': 'anything' } }; MyResource.get( config, function() { // success // do something… } ); 

con el servicio correspondiente declarado así:

 .factory('MyResource', function($resource){ return $resource('url/to/json'); }) 

no funciona: el objeto de configuración va a la url y no a los encabezados http.

Hay una manera de hacer eso ?

headers para $resource están disponibles desde AngularJS 1.1.1. Asegúrate de que tienes la versión correcta utilizada.

El formato es

 $resource('url/to/json', {}, {headers: { 'something': 'anything' }}); 

[Editar por zuma] Lo anterior no parece correcto. El tercer parámetro para $ recurso debe ser diferente. Esto me parece más correcto:

 $resource('url/to/json', {}, { get: { method: 'GET', headers: { 'something': 'anything' } } }); 

El objeto de headers dentro de una acción de recursos admite tanto valores static para sus campos, como también valores dynamic devueltos por una función.

 $resource('url/to/json', {}, { get: { method: 'GET', headers: { 'header_static': 'static_value', 'header_dynamic': dynamicHeaderVal } } }); function dynamicHeaderVal(requestConfig){ // this function will be called every time the "get" action gets called // the result will be used as value for the header item // if it doesn't return a value, the key will not be present in the header } 

Código de demostración

 angular.module('Test',['ngResource']) .controller('corsCtrl', function ($scope, $http, MyResource) { $http.defaults.headers.common['test']= 'team'; //Using $http we can set header also MyResource.get(); }) .factory('MyResource', function($resource) { //Services return $resource('url/to/json'); }) 

DEMO de JsFiddle

 see in Request Header 

Para usar el encabezado “Content-Type” puede necesitar especificar un cuerpo de datos al menos para versiones alrededor de 1.4.7+ debido a $ http eliminando encabezados sin un cuerpo de datos que son === ‘content-type’. Ver # 10255 en 1.4.7 / angular.js

Acabo de establecer “data: false” para suplantarlo, sin especificar un cuerpo de datos:

 $resource('url/to/json', {}, { get: { method: 'GET', data: false, headers: { 'something': 'anything' } } });