我喜欢使用angularjs资源在每个请求上发送自定义标头。在每个请求之前,必须再次创建标头。以下不起作用。标头只计算一次,因此只有一个请求有效。对同一资源的第二个请求失败。它的很多复制n贴“header:authhandler.createHeader()”也......
myApp.service('Rest', ['$resource', 'authhandler',
function($resource, 'authhandler',{
return {
User: $resource( api_domain + "/api/users/:userid", {}, {
get: {method: 'GET', headers: authhandler.createHeader()},
remove: {method: 'DELETE', headers: authhandler.createHeader()},
edit: {method: 'PUT', headers: authhandler.createHeader()},
add: {method: 'POST', headers: authhandler.createHeader()},
patch: {method: 'PATCH', headers: authhandler.createHeader()}
}),
};
}]);
有人知道如何解决这个问题吗? 我有一个有效的解决方案,但我不喜欢它,因为有大量的复制和粘贴源代码:
myApp.controller('MyController', function(RestResource, authhandler, $routeParams) {
$http.defaults.headers.common = authhandler.createHeader();
RestResource.get({userid: $routeParams.id}, function(result) {
//...
});
});
我会很高兴提示如何解决这个问题!提前谢谢!
答案 0 :(得分:4)
您可以使用请求转换器:
function($resource, 'authhandler',{
return {
User: $resource( api_domain + "/api/users/:userid", {}, {
get: {
method: 'GET',
transformRequest: function(data, headersGetter) {
var currentHeaders = headersGetter();
angular.extend(currentHeaders, authhandler.createHeader());
return data;
}
},
您还可以将转换器添加到所有请求中:
myApp.config(['$httpProvider', function($httpProvider) {
$httpProvider.defaults.transformRequest.push(function(data, headersGetter) {
var currentHeaders = headersGetter();
angular.extend(currentHeaders, authhandler.createHeader());
return data;
});
通过这种方式,您无需配置任何资源或资源。