AngularJS如何只发送一次数据(快速按下)

时间:2015-07-30 05:36:07

标签: angularjs angularjs-factory

我有textarea,如果按“Enter”按钮,我需要将数据发送到服务器,但如果快速按“Enter”几次,“addNewCommentFactory.addComment”会多次发送数据。如何只发送一个请求(如果快速按下按钮几次)。也许,我应该在第二次发送之前使用延迟。例如,如果按钮之间的时间按下不到1秒,而下一条评论==上一条评论 - 做一些事情。请帮助。

$scope.sendComment = function(event, press){

  if(event.keyCode === 13 || press){
    
    if ($scope.new_comment && $scope.new_comment.length > 0) {

addNewCommentFactory.addComment($scope.large, $scope.new_comment).then(function(obj){ 
          $scope.new_comment = null;

              $timeout(function () { event.target.blur() }, 10, false);

        });
     
    }
  }
}
  <textarea  placeholder="Type a message here" ng-model="new_comment" ng-keydown="sendComment($event)"></textarea>

2 个答案:

答案 0 :(得分:1)

只需在处理addComment时禁用该按钮。

$scope.buttonDisabled = false;
$scope.sendComment = function(event, press){

  if(event.keyCode === 13 || press){

    if ($scope.new_comment && $scope.new_comment.length > 0) {

$scope.buttonDisabled = true;
addNewCommentFactory.addComment($scope.large, $scope.new_comment).then(function(obj){ 
          $scope.new_comment = null;
          $scope.buttonDisabled = false;
              $timeout(function () { event.target.blur() }, 10, false);

        }, function(){ $scope.buttonDisabled=false; });
    }
  }
}

在视野中,

<button ng-disabled="buttonDisabled" />

答案 1 :(得分:0)

您还可以通过检查重复项创建http请求服务或装饰当前的$ http服务来全局阻止重复请求。

请检查:http://blog.codebrag.com/post/57412530001/preventing-duplicated-requests-in-angularjs