一旦它可用,如何在角度工厂中设置变量?

时间:2014-06-04 08:40:06

标签: angularjs

我创建了一个与API通信的角度工厂。对于该API,我需要为每个请求传入一个“x-token”自定义标头,并且一旦用户登录,该标记就会在localstorage中创建。

我注意到工厂认为令牌为空,可能是因为工厂在用户登录之前加载了?

有没有办法在用户登录后在工厂中填充此令牌,或者有更好的方法来处理此问题?

app.factory('apiFactory', ['$http', function($http){
    $http.defaults.headers.common['x-token'] = localStorage.getItem("token");

在上面的代码示例中,工厂说x-token为null,而它肯定在localstorage中。

1 个答案:

答案 0 :(得分:0)

我认为你是正确的,因为工厂在用户登录之前加载,因此令牌为空。

有几种方法可以解决这个问题。您可以使用$rootScope.$on事件调用松散地耦合标头值的设置,如下所示:

app.factory("apiFactory", [
  "$http", function($http) {
    return $rootScope.$on("loginSuccess", function() {
      $http.defaults.headers.common["x-token"] = localStorage.getItem("token");
    });
  }
]);

当用户成功登录时(设置$broadcast之后),您将localStorage该事件。

$rootScope.$broadcast('loginSuccess');

另一种方法是通过某种apiFactory.setHeader(token)方法紧密耦合标题值的设置。然后,您可以将apiFactory注入执行登录的控制器或服务,并在成功时调用该方法。