在运行时更新常见的AngularJS HTTP标头

时间:2013-07-08 13:19:02

标签: javascript angularjs coffeescript http-headers runtime

如何在运行时从AngularJS控制器更新公共HTTP标头,例如$httpProvider.defaults.headers.common['Authorization']?似乎$httpProvider只能从配置模块访问,但我需要更新来自控制器或控制器调用的服务的所有未来请求的公共HTTP头。

我可以通过将$http注入我的控制器来更新下一个请求的本地范围标头,但我需要为将来的所有请求更新HTTP标头,特别是基本身份验证。

2 个答案:

答案 0 :(得分:2)

不确定它何时出现在Angular中,但在20个月之后,您可以选择在运行时直接在$ http对象上定义默认标头。

来自$http documentation:设置HTTP标头

$http.defaults.headers.common.Authorization = 'Basic dXNlcjpwYXNzd29yZA=='

答案 1 :(得分:1)

当我不得不使用API​​时,我曾使用过这种策略。我创建了一个XYZApiService来包装对该API的所有请求。

这是一个简单的例子:

var app = angular.module('myApp', []);

app.controller('MainCtrl', function($scope, HttpWrapper) {
  $scope.movies = [];
  HttpWrapper.setAuthorization('Basic dXNlcjpwYXNzd29yZA==');
  HttpWrapper.http({
    method: 'get',
    url: 'movies.json'
  }, function(data, status){
    $scope.movies = data;
  }, function(data, status){
    console.log('error', data, status);
  })
});

app.run();

app.factory('HttpWrapper', function($http) {
  var authorization = null;
  return {
    setAuthorization: function(auth){
      authorization = auth;
    },
    http: function(options, successCallback, errorCallback){
      if(authorization){
        options.headers = options.headers || {};
        options.headers.authorization = authorization;
      }
      console.log(options);
      $http(options).success(successCallback).error(errorCallback);
    }
  }
});

您可以在Plunker中尝试:

http://plnkr.co/edit/hr2Rvojic0asvWxSoalo?p=preview