У меня есть вход, который фильтрует список ng-repeat при изменении. Повторение содержит много данных и требует нескольких секунд, чтобы отфильтровать все. Я бы хотел, чтобы у них была задержка 0,5 секунды, прежде чем я начну процесс фильтрации. Как правильно создать эту задержку в angular?
вход
<input ng-model="xyz" ng-change="FilterByName()" />
Повторение
<div ng-repeat"foo in bar">
<p>{{foo.bar}}</p>
</div>
Функция фильтра
$scope.FilterByName = function () {
//Filtering Stuff Here
});
Спасибо
$timeout
для 500 мс.$scope.FilterByName = function () { $timeout(_filterByName , 500)
$timeout.cancel(timeoutpromise)
если один тайм-аут выполняется и запускается другое изменение.Ответы:
AngularJS 1.3+
Начиная с AngularJS 1.3, вы можете использовать
debounce
свойствоngModelOptions
предоставляет, чтобы добиться этого очень просто,$timeout
вообще не используя . Вот пример:HTML:
JS:
-- ИЛИ --
Проверьте скрипку
До AngularJS 1.3
Вам нужно будет использовать $ timeout, чтобы добавить задержку, и, вероятно, с помощью $ timeout.cancel (previoustimeout) вы можете отменить любой предыдущий тайм-аут и запустить новый (помогает предотвратить многократное выполнение фильтрации в течение временной интервал)
Вот пример:
источник
ng-model-options
было добавлено только в Angular v1.3 (и свойство debounce в beta.8 ). Тем, кому все еще нужно использовать старую версию Angular, придется прибегнуть к другим решениям, например, от PSL, или с помощью внешнего модуля, такого как ng-debounce .Вы можете использовать
$timeout
для добавления задержки и, вероятно, с ее помощью$timeout.cancel(previoustimeout)
вы можете отменить любой предыдущий тайм-аут и запустить новый (помогает предотвратить выполнение фильтрации несколько раз подряд в течение определенного интервала времени)Пример:-
Plnkr
источник
ng-change
когда я не хочу отклонять модель.Я знаю, что вопрос слишком старый. Но все же хочу предоставить один более быстрый способ добиться этого с помощью противодействия .
Таким образом, код можно записать как
Debounce будет принимать число в миллисекундах.
источник
или вы можете использовать директиву typeahead-wait-ms = "1000" 'из angular-ui
источник