добавить задержку для ng-keyup в angularjs - PullRequest
0 голосов
/ 14 марта 2019

В моем приложении AngularJS у меня есть привязка к полю ввода в ng-keyup для вызова функции при каждом изменении значения поля ввода.

<input type="text" ng-model="logoText.text" ng-keyup="updateTextLogo();">

ЭтоФункция обновляет текст на холсте и выполняет еще несколько действий, которые занимают 2-3 секунды.

Хотя ввод каждой буквы с небольшой задержкой (медленный) работает нормально, быстрый ввод результатов приводит к наложению данных холста.

Можно ли добавить задержку для выполнения функции при keyup?

Пример. Текущий сценарий таков, что если пользователь должен ввести Hello функциювызывается на каждую букву.

Я хочу добавить задержку, чтобы, если пользователь ввел Ад в поле, слово Ад будет обрабатываться вместе вместокаждой буквы.

Ответы [ 2 ]

2 голосов
/ 14 марта 2019

Если вы используете угловой 1.3 или выше, у вас есть debounce в ng-model-options.

<input type="text" ng-model="logoText.text" ng-model-options="{debounce: 1000}" ng-keyup="triggerTimer();">

Debounce влияет на присвоение значения переменной области.

2 голосов
/ 14 марта 2019

Вы можете воспользоваться службой $ timeout:

<input type="text" ng-model="logoText.text" ng-keyup="triggerTimer();">

var timerStarted = false;
$scope.triggerTimer = function() {
  if(!timerStarted) {
    $timeout(updateTextLogo, 2000);
    timerStarted = true;
  }
}

Функция updateTextLogo должна сбросить флаг timerStarted, чтобы таймер можно было запустить снова, когда появятся дополнительные символы.

var updateTextLogo = function() {
  timerStarted = false;
  // do stuff...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...