2015-07-27 3 views
0

im работает с angularjs, и у меня есть кнопка для создания билетов, и эта работа с http-запросом, для вызова php-сети, проблема заключается в том, что http-запрос имеет задержку в х секунд, и люди могут сделать так много кликов в этой задержке, результат, тики изменения varius и только 1 работа, им нужно наложить задержку на кнопку, но я не могу сделать эту работу, пожалуйста, проверьте это и обратите внимание, что решение должно быть вне requestjsfiddleОтключена кнопка после x секунд

+0

Так что это вопрос? Вам нужны или не нужны дополнительные клики для вызова Ajax? Почему бы вам просто отключить кнопку при нажатии и включить ее, когда вызов Ajax завершен? – epascarello

+0

«Мне нужно поставить задержку в кнопке, но я не могу сделать эту работу», кажется, настоящий вопрос здесь. – jmar777

+0

@ jmar777: Я понимаю, что проблема заключается в том, что пользователи спама многократно нажимают кнопку и делают несколько вызовов API во время входа в систему, поэтому решение состоит в том, чтобы отключить кнопку после первого щелчка. Я мог быть совершенно не прав. Мы понимаем вопрос по-разному. – VSO

ответ

2

угловые обеспечивает компонент $timeout службы для этого:

$timeout(function() { 
    $scope.betDelay=false; 
}, 1000); 

Среди других вещей , когда вы используете вспомогательный помощник $timeout, он автоматически выполняет проверку грязной модели (которая по умолчанию не будет выполняться при использовании по умолчанию window.setTimeout()).

В принципе, Угловой не собирается просто проверять без остановок независимо от того, изменился или нет $scope; он проверяет только ключевые моменты жизненного цикла компонента, а $ timeout помогает вам привязываться к этому жизненному циклу.

Смотрите обновленный JSFiddle: http://jsfiddle.net/Lt7aP/862/


В качестве альтернативы, вы можете также явно указать $scope, что он должен выполнять грязную проверку с помощью $apply(). Например,

setTimeout(function() { 
    $scope.betDelay=false; 
    $scope.$apply(); 
}, 1000); 

Пример: http://jsfiddle.net/Lt7aP/863/

+1

спасибо, чувак, эта работа, извините за мою задержку :) – jearca

0

Мое понимание вашего поста является то, что пользователь может нажать кнопку Войти несколько раз, что делает несколько записей дубликатов (АНИ не имеет времени для проверки существующих записей , потому что он попадает так быстро).

Мы справляемся с этим, проверяя, была ли кнопка нажата. Сделайте переменную с именем $scope.isButtonClicked и установите для нее значение false. Проверьте, установлено ли значение false onClick. Если оно ложно, установите значение true и сделайте запрос.

function LoginController($scope) { 
    $scope.isButtonClicked = false; 
    $scope.login = function() { 
     if($scope.isButtonClicked === false){ 
      $scope.isButtonClicked = true 
      var request = $http({ 
         dataType: 'json', 
         method: "post", 
         url: "/xxx.php", 
         data: { 
          data1: $scope.data1, 
          data2: $scope.data2 
         }, 
         headers: { 'Content-Type': 'application/json' } 
        }); 
      request.success(function (data) {  
       /* note i try puting a delay in the top, but idk why this cant work */ 
      }); 
     } 
    }; 
} 

http://jsfiddle.net/obohxukw/2/

Смежные вопросы