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