0

我想刷新导航栏中使用的用户状态。但现在我必须拜访.all(function() { refresh() });所有$http.post场所。

例如,我可以通过配置捕获所有这些吗?

4

2 回答 2

1

是的,您可以使用请求/响应拦截器进行拦截$http

但更好的设计可能是在 POST 调用更改的属性的导航栏中设置 a $watchcontroller可能在 上$rootScope,但不推荐)。

于 2013-11-13T21:39:55.537 回答
0

这就是我最终做的事情:

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');
});

如果有人有更好的方法,比如如何从拦截器内部获取范围,我很乐意改变这个答案。

于 2013-12-04T19:51:06.003 回答