按键去抖动
Debouncing ng-keypress
有没有人对我在 angular 中消除按键事件有任何指示?我无法让它去抖动。而且我肯定知道,因为我正在使用 $log.debug 打印出按下的键,并且它触发的次数不是去抖动率。
我是这样设置的:
<div ng-keypress="doSomething"></div>
并且在我的控制器中(不是我已经包含 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
}
提前感谢您的帮助。
试试下面的代码:
$scope.doSomething = _.debounce(function(event, keyEvent) {
$scope.$apply(function() {
// Do something here
});
}, 500);
正如@Enzey 所说,_.debounce()
returns 一个 "debounced" 函数,需要在某处调用才能产生任何效果。您需要调用 $apply()
才能触发摘要循环。否则在 debounced 函数中对模型所做的任何更改都不会更新视图。
更新
事实证明,OP 真正想要的是一个节流功能。下面是另一个使用 _.throttle()
:
的代码片段
$scope.doSomething = _.throttle(function($event) {
if ($scope.$$phase) return; // Prevents 'digest already in progress' errors
$scope.$apply(function() {
// Do something here
});
}, 100);
有没有人对我在 angular 中消除按键事件有任何指示?我无法让它去抖动。而且我肯定知道,因为我正在使用 $log.debug 打印出按下的键,并且它触发的次数不是去抖动率。
我是这样设置的:
<div ng-keypress="doSomething"></div>
并且在我的控制器中(不是我已经包含 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
}
提前感谢您的帮助。
试试下面的代码:
$scope.doSomething = _.debounce(function(event, keyEvent) {
$scope.$apply(function() {
// Do something here
});
}, 500);
正如@Enzey 所说,_.debounce()
returns 一个 "debounced" 函数,需要在某处调用才能产生任何效果。您需要调用 $apply()
才能触发摘要循环。否则在 debounced 函数中对模型所做的任何更改都不会更新视图。
更新
事实证明,OP 真正想要的是一个节流功能。下面是另一个使用 _.throttle()
:
$scope.doSomething = _.throttle(function($event) {
if ($scope.$$phase) return; // Prevents 'digest already in progress' errors
$scope.$apply(function() {
// Do something here
});
}, 100);