2014-07-17 6 views
1

Я пытаюсь, чтобы окно ввода поиска запускало операцию поиска через несколько секунд после того, как пользователь прекратил печатать.AngularJS: как подождать несколько секунд после ввода в поле ввода

В обычном приложении я делаю так:

$('#search').on('input', _.debounce(function(e) { 
    search(); 
    }, 800)); 

Что бы правильный способ добиться чего-то подобного в AngularJS? Существует ли конкретная директива?

Пример кода была бы оценена

+0

вы можете принять ответ в зависимости от того помогли вам ?? – harishr

ответ

1

вы можете дребезг с помощью директивы ниже ...

angular.module('app', []).directive('ngDebounce', function($timeout) { 
    return { 
     restrict: 'A', 
     require: 'ngModel', 
     priority: 99, 
     link: function(scope, elm, attr, ngModelCtrl) { 
      if (attr.type === 'radio' || attr.type === 'checkbox') return; 

      elm.unbind('input'); 

      var debounce; 
      elm.bind('input', function() { 
       $timeout.cancel(debounce); 
       debounce = $timeout(function() { 
        scope.$apply(function() { 
         ngModelCtrl.$setViewValue(elm.val()); 
        }); 
       }, attr.ngDebounce || 1000); 
      }); 
      elm.bind('blur', function() { 
       scope.$apply(function() { 
        ngModelCtrl.$setViewValue(elm.val()); 
       }); 
      }); 
     } 

    } 
}); 
1

я использую этот angular-debounce модуль для одной и той же

<input type="checkbox" ng-model="blah" debounce="500" immediate="true"></input> 

это как и использовать его

EDIT

ответить на ваши комментарий ...

<input type="checkbox" ng-model="blah" debounce="500" immediate="true" ng-change="search()"></input> 
+0

К сожалению, это не вызывает никакой операции поиска. Это только задерживает обновление модели. – finishingmove

+0

для этого вам нужно будет использовать ng-change ... также, пожалуйста, избегайте выполнения операций с использованием #id при работе с угловым – harishr

+0

, если эта проблема решена ур, можете у вас принять/отменить ответ – harishr

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