以下工作正常,但我认为这会全局修改$ httpProvider,这不是我想要的。
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)
}
}
反正这样做了吗?
...
.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;
})
“headers”参数似乎被忽略了。请求仍然是
Content-Type:application/json;charset=UTF-8
我的标题值是否正常?
答案 0 :(得分:63)
我已经确认1.1.3确实支持这一点。但是,您需要确保您还获得了资源服务的1.1.3版本。快速测试:
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;
});
这将生成一个请求标头设置为(使用Chrome确认):
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
快速说明,我无法找到angular-resource.js的下载,所以我不得不去github网站下载它。它是here。
对于一些咯咯笑声,我创造了一个小提琴。请注意,POST调用失败,但其标题设置正确。 Example Fiddle
答案 1 :(得分:20)
虽然开发文档(截至10月12日)显示在$资源中可以覆盖标题,但尚未发布(v1.0.2或v1.1.0)。但是,该功能位于v1.0.x和主分支中。为了获得该功能,您可以考虑立即从v1.0.x分支构建。
如何构建:http://docs.angularjs.org/#H1_4
或者,您可以从快照构建中提取:http://code.angularjs.org/snapshot/
看起来这个功能将出现在下一个版本中。
答案 2 :(得分:3)
只需添加1.1.5资源文件(和其他文件)的链接:http://code.angularjs.org/1.1.5/
您可以将网址设置为与您要查找的版本相匹配 例如1.1.4:http://code.angularjs.org/1.1.4/