2012-10-09 7 views
27

Lo siguiente funciona bien, pero creo que esto modifica el $ httpProvider globalmente, que no es lo que quiero.

angular.module('SessionService', ['ngResource']) 
    .config(function($httpProvider){ 
     $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8' 
    }) 
    .factory('Login', function($resource){ 
     var resource = $resource('/adminui/login',{},{ 
      post:{ 
       method:"POST", 
       isArray:false 
      }, 
     }); 
     return resource; 
    }) 
LoginCtrl = function($scope,Login) { 
    $scope.login = function(){ 
     Login.post($.param({user:$scope.user.username,password:$scope.user.password}),$.noop,$.noop) 
    } 
} 

¿Hay alguna forma de hacerlo?

... 
    .factory('Login', function($resource){ 
     var resource = $resource('/adminui/login',{},{ 
      post:{ 
       method:"POST", 
       isArray:false, 
       headers:{'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'} // ignored 
      }, 
     }); 
     return resource; 
    }) 

Parece que se ha ignorado el parámetro "headers". la solicitud está todavía

Content-Type:application/json;charset=UTF-8

¿Es mi valor para los encabezados de acuerdo?

+0

Es posible que desee ver esto: https://github.com/angular/angular.js/issues/736 – Tosh

Respuesta

63

He confirmado que 1.1.3 sí lo admite. Sin embargo, debe asegurarse de obtener también la versión 1.1.3 del servicio de recursos. Una prueba rápida de:

angular.module('myApp', ['ngResource']). 
    config(['$routeProvider', function($routeProvider) { 
    $routeProvider.when('/', {templateUrl: 'partials/partial1.html',controller: 'MyController'}); 
    $routeProvider.otherwise({redirectTo: '/'}); 
    }]) 

    .controller("MyController", function($scope, Bug) { 
    Bug.post({test:"test"}); 
    }) 

    .factory('Bug', function($resource){ 
    var resource = $resource('/bug',{},{ 
     post:{ 
      method:"POST", 
      isArray:false, 
      headers:{'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'} 
     }, 
    }); 
    return resource; 
}); 

Esto hará que una solicitud con los encabezados ajustado a (confirmada usando Chrome):

Content-Type:application/x-www-form-urlencoded; charset=UTF-8 

Una nota rápida, he podido encontrar una descarga de la angular- resource.js, así que tuve que ir al sitio web github para descargarlo. Es here.

Para algunas risitas, creé un violín. Tenga en cuenta que habrá una llamada POST fallida, pero sus encabezados están configurados correctamente. Example Fiddle

+0

¡Genial! Gracias :) – DanH

20

Mientras que los documentos de desarrollo (hasta el 12 de octubre) muestran que es posible anular los encabezados en $ recurso, aún no se ha liberado (v1.0.2 o v1.1.0). Sin embargo, la característica está en las ramas v1.0.x y master. Para poder acceder a esa característica, puede considerar construir desde la rama v1.0.x por el momento.

Cómo construir: http://docs.angularjs.org/#H1_4

Como alternativa, puede tirar de la acumulación de instantáneas: http://code.angularjs.org/snapshot/

Parece que esta función será en la próxima versión.

+0

Voy a intentar hacer esa compilación. +1 para el enlace. ¡Gracias! – Shanimal

+6

-1 a AngularJS por hacernos probar cosas que no son posibles! – Lee

Cuestiones relacionadas