我创建了一个$httpProvider
拦截器,就像所描述的那样here:
$httpProvider.interceptors.push(function ($q) {
return {
'responseError': function (response) {
var _status,
_message;
switch (response.status) {
case 403:
_status = 'warning';
_message = 'no rights to do this';
break;
case 500:
_status = 'danger';
_message = 'internal server error';
break;
}
Alert.add({status: _status, msg: _message});
return $q.reject(response);
}
};
});
Alert
是我用来显示通知,错误等的服务。它取决于$rootScope
,只是添加一个要在html中呈现的对象。
所以问题是:如何从定义了这个拦截器的Alert
调用我的app.config
服务?或者,如果不可能,我如何在一个地方捕获所有http错误并显示它们?
答案 0 :(得分:1)
您需要使用$injector
,然后在拦截器内部,您可以通过$injector.get
任何服务名称来获取服务。
<强>代码强>
$httpProvider.interceptors.push(function ($q, $injector) {
return {
'responseError': function (response) {
var service = $injector.get('myService'); //here you can get service
var _status,
_message;
switch (response.status) {
case 403:
_status = 'warning';
_message = 'no rights to do this';
break;
case 500:
_status = 'danger';
_message = 'internal server error';
break;
}
Alert.add({status: _status, msg: _message});
return $q.reject(response);
}
};
});
<强>更新强>
根据@zeroflagL解决方案,只需直接在函数中依赖注入服务,它就可以更简单地工作。
<强>代码强>
$httpProvider.interceptors.push(function ($q, myService) {
return {
'responseError': function (response) {
var _status,
_message;
switch (response.status) {
case 403:
_status = 'warning';
_message = 'no rights to do this';
break;
case 500:
_status = 'danger';
_message = 'internal server error';
break;
}
Alert.add({status: _status, msg: _message});
return $q.reject(response);
}
};
});