当前位置: 首页 > 面试题库 >

防止/处理有角的双击

杭曦
2023-03-14
问题内容

在angular中,我们可以设置一个按钮来发送ajax请求,如下所示:

... ng-click="button-click"

并在控制器中:

...
$scope.buttonClicked = function() {
   ...
   ...
   // make ajax request 
   ...
   ...
}

因此,为防止重复提交,我可以在单击按钮时将标志设置为buttonclicked =
true,而在ajax回调完成时将其取消设置。但是,即使这样,控制权仍会归还给有角力的人,他们将更新Dom。这意味着有一个很小的窗口,在原始按钮单击完全100%完成之前,可以再次单击该按钮。

这是一个小窗口,但仍然可能发生。完全避免这种情况发生的任何技巧-客户端,即不对服务器进行任何更新。

谢谢


问题答案:

ng- disabled在此示例中,使用工作正常。无论我多么疯狂地单击控制台消息,它仅填充一次。

var app = angular.module('plunker', []);



app.controller('MainCtrl', function($scope) {

  $scope.submitData = function() {

    $scope.buttonDisabled = true;

    console.log("button clicked");

  }



  function augment() {

    var name, fn;

    for (name in $scope) {

      fn = $scope[name];

      if (typeof fn === 'function') {

        if (name.indexOf("$") !== -1) {

          $scope[name] = (function(name, fn) {

            var args = arguments;

            return function() {

              console.log("calling " + name);

              console.time(name);

              fn.apply(this, arguments);

              console.timeEnd(name);

            }

          })(name, fn);

        }

      }

    }

  }



  augment();

});


<!doctype html>

<html ng-app="plunker">



<head>

  <meta charset="utf-8">

  <title>AngularJS Plunker</title>

  <link rel="stylesheet" href="style.css">

  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular.js"></script>

  <script src="app.js"></script>

</head>



<body ng-controller="MainCtrl">

  <input type="button" ng-click="submitData()" ng-disabled="buttonDisabled" value="Submit" />

</body>



</html>

我很好奇到底角度将更改应用到buttonDisabled标志需要多长时间。如果在插件示例中检查控制台,它将显示$eval$apply方法执行所需的时间。在我的机器上,平均需要1-2毫秒。



 类似资料:
  • 我有一个包装了一个块,当点击它时,会打开一个新的场景(我使用的是react native router flux)。 除了快速点击之外,一切正常,场景可以渲染两次。 我想防止用户快速点击该按钮。 在本机中实现这一点的最佳方法是什么?我研究了手势应答器系统,但没有任何例子或类似的东西,如果你是新来的,像我一样,会让人困惑。

  • 问题内容: 在我的服务器应用程序中,当用户无权访问端点时,我想返回“禁止”值。 为此,我创建了一个被拒绝的重用承诺: 然后在应用程序中的其他位置: 但是,当我启动我的应用程序时,会收到警告 我怎么能告诉Node这个Promise可以解决呢? 问题答案: 我创建了被拒绝的重用承诺 好吧,仅创建一个可重用的函数可能会容易得多: 每次调用该错误时,也会为该错误提供适当的堆栈跟踪。 我怎么能告诉Node这

  • 问题内容: 我是Spring Batch的新手,但遇到了问题。 我正在处理的批处理应用程序从分隔的文本文件中读取和处理行。我已将应用程序配置为使用FlatFileReader来读取带分隔符的文本文件,但问题是正在读取的某些数据中带有双引号。当FlatFileReader遇到单引号时,将引发FlatFileParseException,但是当存在两个双引号时,则不会引发FlatFileParseEx

  • 问题内容: 我正在尝试做类似于嵌入式Google地图的操作。我的组件应忽略单点触摸(允许用户滚动页面),并在其自身外部捏合(允许用户缩放页面),但应对双键触摸做出反应(允许用户在组件内部导航),并在这种情况下禁止任何默认操作。 如何防止触摸事件的默认处理,仅在用户用两只手指与我的组件进行交互的情况下? 我尝试过的 我尝试捕获,和。事实证明,在FF Android上,对部件进行捏合时触发的第一个事件

  • 我正在运行一个spark作业,流上下文每60秒运行一次。问题是一批处理时间太长(由于计算和保存RDD和Parquet到云存储),一批无法在1分钟内完成。它结束于下一批继续进入并成为活动的(状态=处理)。过了一段时间,我有10个活动批处理,而第一个已经完成。结果,它明显减慢,没有一批能够完成。是否存在严格限制一次活动批处理的数量为1。 多谢了。

  • 问题内容: 我有一个使用自定义RowSorter可排序列的JTable。我假设RowSorter类自动将自身作为MouseListener添加到表的ColumnHeader中,因为它无需执行任何自定义鼠标侦听代码即可自动执行排序。这很完美。 我还添加了一些代码(基于此示例),该代码允许用户通过双击列标题中的表之间的空间来调整表列的大小(模仿Excel的行为)。问题是,当用户双击标题以调整列的大小时