我想刷新导航栏中使用的用户状态。但现在我必须拜访.all(function() { refresh() });
所有$http.post
场所。
例如,我可以通过配置捕获所有这些吗?
是的,您可以使用请求/响应拦截器进行拦截$http
。
但更好的设计可能是在 POST 调用更改的属性的导航栏中设置 a $watch
(controller
可能在 上$rootScope
,但不推荐)。
这就是我最终做的事情:
app.config(function($httpProvider, $provide) {
// This sucks but Angular is so compliated that we can't get the rootScope
// in a simple way inside a factory for a configuration
function getRootScope() {
return angular.element('body').scope();
}
// Call refresh() after each HTTP destructive action
$provide.factory('refreshAfterRequests', function($q) {
return {
'response': function(response) {
// Every non-GET request can potentialy change the state of the user
if (response.config.method !== 'GET') {
getRootScope().refresh();
}
return response;
}
};
});
// The refresh is an interceptor on all HTTP requests made with Angular
$httpProvider.interceptors.push('refreshAfterRequests');
});
如果有人有更好的方法,比如如何从拦截器内部获取范围,我很乐意改变这个答案。