0

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
}

事前にご協力いただきありがとうございます。

4

1 に答える 1

1

次のコードを試してください。

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

ワーキングプランカー

@Enzeyが言っ_.debounce()たように、何らかの効果を得るためにどこかで呼び出す必要がある「デバウンスされた」関数を返します。$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);
于 2015-04-21T04:28:37.823 に答える