大家好我对角度很新,我对拦截器中处理重定向的最佳方法有疑问。
我的应用中有某些页面,如果我选择了某个帐户,我应该只能访问这些页面。因此,如果未选择帐户,我希望用户可以选择该帐户的路线。
以下是我失败的尝试:
// within config
$httpProvider.interceptors.push(function($q, $injector){
return {
'request': function(config) {
var state = $injector.get('$state');
if(state.is('user.list')) {
var accountService = $injector.get('AccountService');
if(!accountService.accountSelected()){
// cancel the current request
var defer = $q.defer();
defer.resolve();
config.timeout = defer.promise;
state.go('account.select');
}
}
return config;
}
}
});
这导致了我的无限循环。出于某种原因,当state.go
触发 - 并且它被重新拦截时,状态仍然是" user.list"
注意:我使用的是ui-router,angular 1.2.6
另一个注意:我想把它放在另一个地方是一个state.resolve块。
谢谢你的帮助!
答案 0 :(得分:4)
这样做
$injector.get('$state').transitionTo('public.login');
以下完整代码
var interceptor = ['$location', '$q', '$injector', function($location, $q, $injector) {
function success(response) {
return response;
}
function error(response) {
if(response.status === 401) {
$injector.get('$state').transitionTo('public.login');
return $q.reject(response);
}
else {
return $q.reject(response);
}
}
return function(promise) {
return promise.then(success, error);
}
}];
$httpProvider.responseInterceptors.push(interceptor);
答案 1 :(得分:1)