2017-03-27 8 views
1

イベントトリガx回をカウントするためにアンダースコアのスロットル/デバウンスを使用するにはどうすればよいですか?その後、一定の間隔の後にxの知識でイベントをトリガーしますか?スロットル/デバウンスを使用してイベントをカウントして、イベントを実行します。

HTML

<div ng-app ng-controller="testC"> 
    <input type="submit" ng-click="add()" value="add"></input> 
    {{counter}} 
</div> 

JS

function testC($scope) { 
    $scope.counter = 0; 
    $scope.add = function() { 
     $scope.counter++; 
    } 

    /* 

     counter x-timed add has triggered 
     after interval has been reached trigger a event that does $scope.counter = $scope.counter + x 

    */ 
} 

https://jsfiddle.net/6w747zzL/

+0

'_.throttle'は、すべての_x-times_が、ほとんど一度_x-milliseconds_ –

+0

はいあたりでトリガするためのトリガのためではなく、機能の追加はカウンターを持っていると言うことができますスロットル内の関数への呼び出し。その後、それは動作します。しかし、私はどのように角度でそれを書いていますか? –

+0

このようなことを意味しますか:https://jsfiddle.net/6w747zzL/1/(ボタンを速くクリックしてみてください) –

答えて

1

私は私のコメントで書いたように、あなたはすべてのX-ミリ秒 "ヘビーデューティー" 機能を呼び出すためにスロットルを使用するので、このあなたがそれを行う方法です:

<div ng-app ng-controller="testC"> 
    <input type="submit" ng-click="add()" value="add"> 
    counter: {{counter}} <br> 
    throttle: {{ throttle }}<br> 
    non-throttle: {{ nonthrottle }} 
</div> 

function testC($scope, $timeout) { 
    $scope.counter = 0; 
    $scope.add = function() { 
     $scope.counter++; 
    } 

    $scope.throttle = 0; 
    $scope.$watch('counter', _.throttle(function(value) { 
     // Wrapping this in '$timeout' will ensure a digest cycle execute that will update the view (Since underscore is not native angular function) 
     $timeout(function() { 
      $scope.throttle++; 
     }); 
    }, 500)); 

    $scope.nonthrottle = 0; 
    $scope.$watch('counter', function(value) { 
    $scope.nonthrottle++; 
    }); 
} 

ボタンをすばやくクリックすると、ボタンをクリックするたびにスロットルウォッチャーが更新されず、500msごとに最大で1回だけ更新されることがわかります。

の作業例:https://jsfiddle.net/6w747zzL/2/

+0

ありがとう、私は何かsimilairを使用しています。しかし、この場合、デバウンスはスロットルよりも優れていると思います。 –

+0

@PresidentCamachoそして、 '_.debounce'を使うことができますが、' $ timeout'を注入して、ビュー関連のプロパティを更新するときにコードをラップするのを忘れないでくださいダイジェストサイクルとビューを更新する(私は私の答えを更新し、 '$タイムアウト'を含む) –

+1

本当に、ありがとう!!! –

関連する問題