我正在设置一个全局响应拦截器来处理错误的重定向。问题在于页面未使用ErrorCtrl,地址栏也未显示位置已更改。这是工厂:
famaApp.factory('responseObserver', function responseObserver($q, $location) {
return {
'responseError': function(errorResponse) {
$location.path('/error/' + errorResponse.status);
return $q.reject(errorResponse);
}
};
});
它被推送到app.config中的$ httpProvider的拦截器中:
$httpProvider.interceptors.push('responseObserver');
我检查了一种特定服务中的路径,该服务的调用方式如下:
AuthenticationService.authenticate($scope.credentials, function(success) {
if (success) {
...
} else {
console.log($location.url());
...
}
});
并且$ location.url()是正确的,/ error / 502。知道我在做什么错吗?
编辑:
此后,我更新了代码,但仍然无法正常工作。这是我的新配置:
app.config(['$routeProvider', '$httpProvider',
function($routeProvider, $httpProvider) {
$httpProvider.interceptors.push(function ($q, $location) {
return {
responseError: function (response) {
$location.path('/error/' + response.status);
return $q.reject(response);
}
};
});
...
}]);
不幸的是,问题仍然存在。
最佳答案
尝试直接在应用模块配置中的拦截器中添加“ responseError”。这个对我有用!
var app = angular.module('yourAppName', []);
app.config(function ($httpProvider) {
$httpProvider.interceptors.push(function ($q, $location) {
return {
responseError: function (response) {
$location.path('/error/' + response.status);
return $q.reject(response);
}
}
}
});
不必要验证响应。
AuthenticationService.authenticate($scope.credentials, function(success) {
if (success) {
...
} else {
console.log($location.url());
...
}
});
第三个参数是回调错误。当响应被“ $ q.reject”拒绝时执行。
AuthenticationService.authenticate($scope.credentials, function (response) {
/**
* Success response
*/
}, function (response) {
/**
* Error response
*/
});
关于javascript - Angular 响应拦截器不重定向,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33108607/