获取$ state.current(ui-router)到$ http拦截器

时间:2014-02-28 17:14:35

标签: angularjs angularjs-service angular-ui-router

我想要实现的目标

我想在$ http拦截器中获取当前状态的数据值。我已经创建了拦截器。

问题

我不知道如何在我的拦截器中捕获$ state.current.data。我尝试使用$ injector.get($ state),但是无法读取对象的属性。

   
 angular.module('mymodule').factory 'HttpInterceptor', [
 '$location', '$injector'
  ($location, $injector) ->

  request: (config) ->
   # Do something when sending the request
   console.log(config.headers.hasOwnProperty('Authorization'))
   if config.headers.hasOwnProperty('Authorization') == false
    $location.url("/login")
   config

3 个答案:

答案 0 :(得分:0)

我不熟悉$ state行为,但你可以创建一个服务来存储状态的当前数据并将其放入注入器中。

答案 1 :(得分:0)

我或许可以告诉你如何通过运行块来实现它。

app.run(function (StateInterceptor, FPSSO, HTTPResponseCode, $state, SessionManager, notifications, Utils, $timeout) {
  StateInterceptor.startService();

  var httpSecurityInterceptor =  function(response, deferred){
    var propagatePromise = true;
    switch(response.status){
      case HTTPResponseCode.UNAUTHORIZED:
        SessionManager.Logout();
        notifications.showErrorMessage("Your session has expired. Please sign in again.", "Error");
        $state.go('Logout', {isLogout: true, returnUrl: $state.current.name});  
        propagatePromise = false;  
        break;
      default:
        var res = Utils.ExtractResponse(response);
        res.status = response.status;
        deferred.reject(res);
    }
    return propagatePromise;
  }

  FPSSO.API.setErrorInterceptor(httpSecurityInterceptor);

你可以看到在switch语句的Unauthorized情况下,我可以访问$ state.current并将我的应用程序路由到'Logout'。这是一个部署在生产中的代码,所以我很确定它有效。

尝试实现类似的目标。

答案 2 :(得分:0)

我可以使用拦截器中的以下代码正确注入$ state:

   $timeout(function () {
                    $state = $injector.get('$state');
                });