AngularJS:在输入框中输入后如何等待几秒钟

时间:2014-07-17 16:23:52

标签: angularjs debouncing

我试图在用户停止输入几秒后尝试使用搜索输入框触发搜索操作。

在普通的应用程序中,我喜欢这样:

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

在AngularJS中实现类似功能的正确方法是什么?有没有具体的指令?

非常感谢示例代码

2 个答案:

答案 0 :(得分:1)

我正在使用此angular-debounce模块进行相同的

<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>

答案 1 :(得分: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());
                });
            });
        }

    }
});