AngularJs:http请求上的事件监听器

时间:2015-06-02 09:46:16

标签: angularjs ionic-framework ionic

由于我使用Oauth2保护我的Api,如果以前的访问令牌已经过期,我需要在任何http请求之前获取新的访问令牌。

到目前为止,我还没有多少使用过事件监听器。

这就是我现在所做的事情(请告诉我是否正确):

ApplicationController.js

app.controller('ApplicationController', function($rootScope, $scope, $localStorage, AuthService){

    // Listening event apiRequested
    $scope.$on('event:apiRequested', function(e) {

        AuthService.token();
        // Restore the access_token in case it has changed
        access_token = $localStorage.getObject('access_token');

    });

})

UserController.js:

$rootScope.$broadcast('event:apiRequested');

// Get Users around
return $http.post(domain+'/api/users?access_token='+access_token.key, data).then(function(response){
    return response;
});

首先我不确定...如果事件已经完全执行,是否会处理$ http?

因为我不确定,我正在考虑添加回调。

这个想法:

$rootScope.$broadcast('event:apiRequested', function(response){

    if(response){

        // Get Users around
        return $http.post(domain+'/api/users?access_token='+access_token.key, data).then(function(response){
            return response;
        });

    }

});

请告诉我是否可以这样做,或者我应该使用除事件监听器之外的其他内容。

1 个答案:

答案 0 :(得分:4)

为什么不使用拦截器拦截HTTP请求? 在您的情况下,您应将此特定行为添加到"请求"部分。 下面看一个拦截器例子: var $ myService; //添加存储服务的常量     $ httpProvider.interceptors.push([' $ location',' $ injector',' $ q',function($ location,$ injector,$ q){                              返回{                                '请求' :function(config){                                  console.log("拦截请求",config.url,config)                                  //你的令牌应该在这一部分中进行检索                                  返回配置                                },                                '响应' :function(config){                                  $ myService = $ myService || $ injector.get(' $为myService'); //如果未定义常量,则手动注入服务                                  console.log("拦截响应",config)                                  //你的令牌应该在这一部分中进行检索                                  返回配置                                },                                  ' responseError':function(rejection){                                      console.log(" responseError截获",拒绝);                                       if(rejection.status === 403){                                          return $ q.reject(rejection);                                      } else if(rejection.status === 423){                                          return $ q.reject(rejection);                                      }其他                                           return $ q.reject(rejection);                                  }                              };                          }]); 拦截器应定义为.config([" $ httpProvider&#34 ;, function($ httpProvider)