我正在设置一个全局响应拦截器来处理重定向错误。问题是该页面没有使用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);
}
};
});
...
}]);
不幸的是问题仍然存在。
答案 0 :(得分:2)
尝试直接在app模块配置中添加拦截器中的“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
*/
});
答案 1 :(得分:0)
删除
return $q.reject(response);
解决了这个问题。