Javascript angularjs$资源请求期间阻止/取消阻止表单

Javascript angularjs$资源请求期间阻止/取消阻止表单,javascript,angularjs,Javascript,Angularjs,我希望每次对服务器执行异步调用时都禁用表单。 目前,我通过$scope变量手动执行此操作,该变量分配给我的字段集的ng disabled属性。然而,我认为一定有某种方法可以使用HTTP拦截器来实现这一点? 请建议如何“捕获”每次调用之前/之后发生的事件,以便我可以使用这些事件处理程序阻止表单?如果您希望在任何时候有$http活动时显示表单(很像加载小部件),则可以为此使用拦截器 基本上,您将$broadcast来自$rootScope的事件,并在附加到表单的指令中捕获它们,该指令将根据表单处理的

我希望每次对服务器执行异步调用时都禁用表单。 目前,我通过$scope变量手动执行此操作,该变量分配给我的字段集的ng disabled属性。然而,我认为一定有某种方法可以使用HTTP拦截器来实现这一点?
请建议如何“捕获”每次调用之前/之后发生的事件,以便我可以使用这些事件处理程序阻止表单?

如果您希望在任何时候有
$http
活动时显示表单(很像加载小部件),则可以为此使用拦截器

基本上,您将
$broadcast
来自
$rootScope
的事件,并在附加到表单的指令中捕获它们,该指令将根据表单处理的事件启用或禁用表单

此代码改编自覆盖加载小部件用例的场景:

angular.module('formApp', [])

.config(function($httpProvider) {
  $httpProvider.interceptors.push('disableFormInterceptor');
})

.directive('formToggle', function() {
  return {
    link: function($scope, $element, attrs) {
      var disable = function() {
        // disable form
      };
      var enable = function() {
        // enable form
      };
      $scope.$on('disableForm', disable);
      $scope.$on('enableForm', enable);
    }
  };
})

.factory('disableFormInterceptor', function($q, $rootScope) {
  var activeRequests = 0;
  var started = function() {
    if(activeRequests==0) {
      $rootScope.$broadcast('disableForm');
    }    
    activeRequests++;
  };
  var ended = function() {
    activeRequests--;
    if(activeRequests==0) {
      $rootScope.$broadcast('enableForm');
    }
  };
  return {
    request: function(config) {
      started();
      return config || $q.when(config);
    },
    response: function(response) {
      ended();
      return response || $q.when(response);
    },
    responseError: function(rejection) {
      ended();
      return $q.reject(rejection);
    }
  };
});

为什么不使用拦截器之类的东西呢?最好的方法是在表单顶部显示一个处理盖子,我不认为有一种自动化的方法。