ホームページ >ウェブフロントエンド >jsチュートリアル >js で関数のデバウンスを実装する方法 (詳細なチュートリアル)

js で関数のデバウンスを実装する方法 (詳細なチュートリアル)

亚连
亚连オリジナル
2018-06-11 15:53:502232ブラウズ

この記事では、angular.js と vue.js の関数 debounce (debounce) の例を主に紹介しますので、参考にしてください。

問題の説明

検索入力ボックスでは、ユーザーが入力をやめた後にのみ、HTTP リクエストの開始などの後続の操作が実行されます。

電子回路を勉強したことのある学生は、ボタンの手ぶれ補正について知っているはずです。原理は同じです。つまり、アクションが n ミリ秒以内に呼び出されると、そのアクションがこの n ミリ秒以内に再度呼び出される場合、実行時間が再計算されます。この記事では、angular.js と vue.js でユーザー入力の手ぶれ補正をそれぞれ実現する方法について説明します。

angular.jsの解決策

複数の呼び出しを容易にするサービスとしてデバウンス関数を記述します:

.factory('debounce', ['$timeout','$q', function($timeout, $q) {
  // The service is actually this function, which we call with the func
  // that should be debounced and how long to wait in between calls
  return function debounce(func, wait, immediate) {
   var timeout;
   // Create a deferred object that will be resolved when we need to
   // actually call the func
   var deferred = $q.defer();
   return function() {
    var context = this, args = arguments;
    var later = function() {
     timeout = null;
     if(!immediate) {
      deferred.resolve(func.apply(context, args));
      deferred = $q.defer();
     }
    };
    var callNow = immediate && !timeout;
    if ( timeout ) {
     $timeout.cancel(timeout);
    }
    timeout = $timeout(later, wait);
    if (callNow) {
     deferred.resolve(func.apply(context,args));
     deferred = $q.defer();
    }
    return deferred.promise;
   };
  };
 }])

メソッドを呼び出し、この関数を使用する必要があるコントローラー/ディレクティブにデバウンスを注入し、$watchも注入します。 、その後:

rree

完了!

Vue.jsでの解決策

まず、パブリック関数ファイルにdebounce

$scope.$watch('searchText',debounce(function (newV, oldV) {
  console.log(newV, oldV);
  if (newV !== oldV) {
    $scope.getDatas(newV);
  }
}, 350));

を登録し、次に、使用する必要があるコンポーネントにdebounceを導入し、作成されたライフサイクルでそれを呼び出します:

export function debounce(func, delay) {
 let timer

 return function (...args) {
  if (timer) {
   clearTimeout(timer)
  }
  timer = setTimeout(() => {
   func.apply(this, args)
  }, delay)
 }
}

You'終わった!

上記は私があなたのためにまとめたものです。 related Article:respress query serversuseserver

usejsカスタムトリム機能の両端でスペースを削除するためのカスタムトリマjest の使用説明は、反応ネイティブコンポーネントをテストします

vue ですべてを選択してデータバインディングと取得を実装します

以上がjs で関数のデバウンスを実装する方法 (詳細なチュートリアル)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。