Angularjs 有没有更干净的方法来防止调用AJAX的操作多次单击?

Angularjs 有没有更干净的方法来防止调用AJAX的操作多次单击?,angularjs,Angularjs,我有一个视图,它要求在单击按钮时调用ajax。在处理请求的过程中,如果用户不必要地单击,我不希望请求堆积起来。为了阻止通过发出的多个请求,我进行了以下设置 鉴于 <button ng-click="getBooks()"></button> 这对我来说效果很好,但将其添加到同一视图中的多个此类函数中,控制器开始变得混乱。 是否有更好的解决方案来清理这一混乱局面?您可以使用范围变量并将其绑定到ng disabled。这将防止在作用域函数的开头出现额外的if: 鉴于: &l

我有一个视图,它要求在单击按钮时调用ajax。在处理请求的过程中,如果用户不必要地单击,我不希望请求堆积起来。为了阻止通过发出的多个请求,我进行了以下设置

鉴于

<button ng-click="getBooks()"></button>
这对我来说效果很好,但将其添加到同一视图中的多个此类函数中,控制器开始变得混乱。
是否有更好的解决方案来清理这一混乱局面?

您可以使用范围变量并将其绑定到ng disabled。这将防止在作用域函数的开头出现额外的if:

鉴于:

<button ng-click="getBooks()" ng-disabled="inProgress"></button>

您可以使用范围变量并将其绑定到ng disabled。这将防止在作用域函数的开头出现额外的if:

鉴于:

<button ng-click="getBooks()" ng-disabled="inProgress"></button>

如何防止多次点击?该按钮始终处于启用状态,并且阻止发送请求的allowAjax变量从未更改。使用finally()将使代码变得更干净。请求在控制器级别被阻止。此外,变量是ajaxInProgress而不是allowAjax。无论哪种方式,即使ng disabled被添加到按钮,控制器中的代码填充仍保持不变。请阅读您发布的代码。阻止请求的变量是
allowAjax
。而且,正如我所说,除了使用finally()之外,禁用按钮(从而删除无用的if)将使代码更干净(并且用户将从视觉上了解为什么什么都没有发生,并了解他不能单击两次)。正如您提到的代码数量,即代码量,似乎您希望将代码划分为多个文件,因为您还声明它对您非常有效。是吗?哦,我的错!:)制作演示时没有注意到输入错误。谢谢,最后一个区块清理了一点。这如何防止多次点击?该按钮始终处于启用状态,并且阻止发送请求的allowAjax变量从未更改。使用finally()将使代码变得更干净。请求在控制器级别被阻止。此外,变量是ajaxInProgress而不是allowAjax。无论哪种方式,即使ng disabled被添加到按钮,控制器中的代码填充仍保持不变。请阅读您发布的代码。阻止请求的变量是
allowAjax
。而且,正如我所说,除了使用finally()之外,禁用按钮(从而删除无用的if)将使代码更干净(并且用户将从视觉上了解为什么什么都没有发生,并了解他不能单击两次)。正如您提到的代码数量,即代码量,似乎您希望将代码划分为多个文件,因为您还声明它对您非常有效。是吗?哦,我的错!:)制作演示时没有注意到输入错误。谢谢,最后一块清理了一点。谢谢,最后一块清理了一点谢谢,最后一块清理了一点
$scope.inProgress = false;
$scope.getBooks = function () {
    $scope.inProgress = true;
    BooksFactory
       .getBooks()
       .then(function (response) {
           // do something with response;
       })
       .catch(function() {
           // error handling
       })
       .finally(function() {
           $scope.inProgress = false;
       })      
};