我的工厂看起来像:
'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); } } }]);
它吐出日志,但不更改路径。我该怎么做才能做到这一点?
$ location的文档说:
请注意,设置员不会立即更新window.location。而是$ location服务知道作用域的生命周期,并在作用域$ digest阶段将多个$ location突变合并为一个“ commit”到window.location对象。
因此,如果拒绝诺言对产生影响$location,那么您可能看不到预期的更改。
$location
要强制在角度生命周期之外进行更改,可以设置hash用法window.location,然后强制重新加载页面。当然,这将停止执行随后执行的任何代码并清除会话,但是如果用户未登录,这可能就是您想要的。
hash
window.location