我有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>
答案 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