在$ http拦截器中获取$ state url

时间:2015-01-05 14:15:41

标签: angularjs angular-ui-router

我正试图在我的Angular应用程序中正确处理我的404错误。 重定向在这里工作正常但不知何故我无法在这里获得$ state url。 window.location.href得到了印刷,但我没有得到$injector.get('$state').current.url

  .config(['$httpProvider', function($httpProvider) {
    $httpProvider.interceptors.push([
    '$q',
    '$rootScope',
    '$injector',
    function($q, $rootScope, $injector) {
      return {
       'request': function(config) {
           return config;
        },
        'responseError': function(response) {
          console.log(window.location.href);
          console.log($injector.get('$state').current.url);
          //404 error handling
          if (response.status === 404)
            $injector.get('$state').go('404')

          //500 error handling
          if (response.status === 500)
            $injector.get('$state').go('500')

          return response;
        }
      };
    }]);
  }])

我无法弄清楚问题的来源。有没有人有想法?

非常感谢

1 个答案:

答案 0 :(得分:1)

你真的想把它当成一个错误:?

  • 路由更改失败(由于ui-router解析失败)?
  • 任何http请求? (没有链接到ui-router)

如果是routeChange错误,你应该看看ui-router $stateChangeError事件,当任何解析失败时会被触发

示例:

$rootScope.$on("$stateChangeError", function (event, to, toParams, from, fromParams, reason) {
    // error handling code
    // you can use params to retrieve from/to route
});

如果您想捕获任何类似代码片段的http请求,那么只有当ui-router有时间对其进行初始化时,您的代码才能正常工作..如果您不使用,则无法确定ui-router事件。