Debouncing ng-keypress

时间:2015-04-21 03:35:26

标签: javascript angularjs underscore.js keypress debouncing

有没有人有任何指针可以让我以角度去除按键事件?我无法让它去辩护。我肯定知道,因为我使用$ log.debug打印出按下的键,并且它发出的次数不是去抖动率。

我已经设置了这样:

<div ng-keypress="doSomething"></div>

并且在我的控制器中(并非我在此实例中包含了使用其debounce方法的underscore.js):

...
$scope.doSomething = function(event, keyEvent) {
    var keypressed = String.fromCharCode(keyEvent.which).toUpperCase();
    _.debounce(handleKeyPress(keypressed), 500);
}

function handleKeyPress(keypressed) {
    //do something with the keypress
}

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

请尝试以下代码:

$scope.doSomething = _.debounce(function(event, keyEvent) {
    $scope.$apply(function() {
    // Do something here
    });
}, 500);

Working Plunker

正如@Enzey所说,_.debounce()会退回&#34;去抖动&#34;需要在某处调用的函数才能产生任何效果。您需要调用$apply()才能触发摘要周期。否则,在去抖动功能中对模型所做的任何更改都不会更新视图。

<强>更新

事实证明,OP真正想要的是一个限制功能。以下是使用_.throttle()的另一个代码段:

$scope.doSomething = _.throttle(function($event) {
    if ($scope.$$phase) return; // Prevents 'digest already in progress' errors

    $scope.$apply(function() {
        // Do something here
    });
}, 100);