AngularJS - 将 $http 拦截器放在单独的文件中
AngularJS - Put $http interceptor in separate file
如何将我的拦截器放在一个单独的文件中并将其推送到配置块中的 $httpProvider 中。
这是我目前的配置块:
(function() {
'use strict';
angular
.module('app')
.config(config);
config.$inject = ['$httpProvider'];
function config($httpProvider) {
$httpProvider.defaults.withCredentials = true;
$httpProvider.defaults.useXDomain = true;
$httpProvider.interceptors.push(['$injector', '$q', function($injector, $q) {
return {
responseError: function(response) {
var toastr = $injector.get('toastr');
var lodash = $injector.get('lodash');
toastr.error(lodash.get(response, 'data.message', 'Alguma coisa deu errado.'));
if (response.status !== 401) {
return $q.reject(response);
}
var userService = $injector.get('userService');
if (userService.isLogged()) {
userService.logout();
}
var $state = $injector.get('$state');
$state.go('login');
return $q.reject(response);
}
};
}]);
}
})();
使用您在 return {.....}
中的代码创建一个工厂,并将该工厂推送到拦截器集合。
angular
.module('app')
.config(['$httpProvider', 函数($httpProvider) {<br>
$httpProvider.interceptors.push('yourInterceptorFactoryName');
}]);
如何将我的拦截器放在一个单独的文件中并将其推送到配置块中的 $httpProvider 中。
这是我目前的配置块:
(function() {
'use strict';
angular
.module('app')
.config(config);
config.$inject = ['$httpProvider'];
function config($httpProvider) {
$httpProvider.defaults.withCredentials = true;
$httpProvider.defaults.useXDomain = true;
$httpProvider.interceptors.push(['$injector', '$q', function($injector, $q) {
return {
responseError: function(response) {
var toastr = $injector.get('toastr');
var lodash = $injector.get('lodash');
toastr.error(lodash.get(response, 'data.message', 'Alguma coisa deu errado.'));
if (response.status !== 401) {
return $q.reject(response);
}
var userService = $injector.get('userService');
if (userService.isLogged()) {
userService.logout();
}
var $state = $injector.get('$state');
$state.go('login');
return $q.reject(response);
}
};
}]);
}
})();
使用您在 return {.....}
中的代码创建一个工厂,并将该工厂推送到拦截器集合。
angular
.module('app')
.config(['$httpProvider', 函数($httpProvider) {<br>
$httpProvider.interceptors.push('yourInterceptorFactoryName');
}]);