一尘不染

在AngularJS中$ location.path不会在工厂中更改

angularjs

我的工厂看起来像:

'use strict';

angular.module('myApp')
  .factory('httpInterceptor',['$q','$location', '$rootScope', function($q, $location, $rootScope){
    return {
      response: function(response) {

        if(response.success === false) {
console.log("Redirecting");
            $location.path('/login');
            return $q.reject(response);
        }

        return response || $q.when(response);
      }
    }
}]);

它吐出日志,但不更改路径。我该怎么做才能做到这一点?


阅读 188

收藏
2020-07-04

共1个答案

一尘不染

$
location
文档说:

请注意,设置员不会立即更新window.location。而是$ location服务知道作用域的生命周期,并在作用域$ digest阶段将多个$
location突变合并为一个“ commit”到window.location对象。

因此,如果拒绝诺言对产生影响$location,那么您可能看不到预期的更改。

要强制在角度生命周期之外进行更改,可以设置hash用法window.location,然后强制重新加载页面。当然,这将停止执行随后执行的任何代码并清除会话,但是如果用户未登录,这可能就是您想要的。

2020-07-04