1

ユーザーが入力を停止してから数秒後に、検索入力ボックスで検索操作を実行しようとしています。

通常のアプリでは、次のようにします。

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

AngularJS で同様のことを達成する正しい方法は何でしょうか? 特定の指令はありますか?

サンプルコードは大歓迎です

4

2 に答える 2

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());
                });
            });
        }

    }
});
于 2014-08-01T17:40:54.853 に答える
1

私は同じためにこの角度デバウンスモジュールを使用しています

<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>
于 2014-07-17T16:33:58.910 に答える