ユーザーが入力を停止してから数秒後に、検索入力ボックスで検索操作を実行しようとしています。
通常のアプリでは、次のようにします。
$('#search').on('input', _.debounce(function(e) {
search();
}, 800));
AngularJS で同様のことを達成する正しい方法は何でしょうか? 特定の指令はありますか?
サンプルコードは大歓迎です
ユーザーが入力を停止してから数秒後に、検索入力ボックスで検索操作を実行しようとしています。
通常のアプリでは、次のようにします。
$('#search').on('input', _.debounce(function(e) {
search();
}, 800));
AngularJS で同様のことを達成する正しい方法は何でしょうか? 特定の指令はありますか?
サンプルコードは大歓迎です
以下のディレクティブを使用してデバウンスできます...
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());
});
});
}
}
});
私は同じためにこの角度デバウンスモジュールを使用しています
<input type="checkbox" ng-model="blah" debounce="500" immediate="true"></input>
これがあなたの使い方です
編集
あなたのコメントに答えるために...
<input type="checkbox" ng-model="blah" debounce="500" immediate="true" ng-change="search()"></input>