2012-10-09 3 views
27

Das folgende funktioniert gut, aber ich denke, dies ändert den $ httpProvider global, was ist nicht was ich will.

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

Gibt es trotzdem, dies stattdessen zu tun?

Der "headers" -Parameter scheint ignoriert zu werden. noch die Anforderung

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

Ist mein Wert für Header ok?

+0

Sie können sich dies ansehen: https://github.com/angular/angular.js/issues/736 – Tosh

Antwort

63

Ich habe bestätigt, dass 1.1.3 tatsächlich dies unterstützt. Sie müssen jedoch sicherstellen, dass Sie auch die Version 1.1.3 des Ressourcenservice erhalten. Ein schneller Test von:

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

Dies wird eine Anfrage mit den Headern macht auf (bestätigt Chrome):

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

Ein kurzer Hinweis, ich war nicht in der Lage einen Download des Winkel- zu finden resource.js, also musste ich auf die github-website gehen, um sie herunterzuladen. Es ist .

Für ein paar Kichern, habe ich eine Geige erstellt. Beachten Sie, dass es einen fehlgeschlagenen POST-Aufruf geben wird, aber seine Header korrekt festgelegt sind. Example Fiddle

+0

Großartig! Vielen Dank :) – DanH

20

Während die Entwicklungsdokumente (ab dem 12. Oktober) zeigen, dass das Überschreiben von Headern in einer $ -Ressource möglich ist, wurde sie noch nicht veröffentlicht (v1.0.2 oder v1.1.0). Die Funktion befindet sich jedoch in den Verzweigungen v1.0.x und master. Um diese Funktion zu nutzen, sollten Sie in Erwägung ziehen, zunächst aus dem v1.0.x-Zweig zu erstellen.

Wie bauen: http://docs.angularjs.org/#H1_4

Alternativ Sie aus dem Snapshot-Build ziehen könnten: http://code.angularjs.org/snapshot/

Sieht aus wie diese Funktion in der nächsten Version sein wird.

+0

Ich werde versuchen, diese Build zu tun. +1 für den Link Vielen Dank! – Shanimal

+6

-1 zu AngularJS, damit wir Dinge ausprobieren, die nicht möglich sind! – Lee

Verwandte Themen