web-dev-qa-db-ja.com

_.lodashでデバウンスされた関数にパラメーターを渡すことはできますか?

私は_lodash.debounce()を使おうとしていますが、動作しています。しかし、それが最善の方法で機能しているかどうかはわかりません。 lodashのWebサイトで例を確認しましたが、これらはパラメーターを渡さない単純な例のようです。これが私が持っているものです:

_$scope.parsePid = _.debounce(function () {
    $scope.$apply(function () {
        var pid = $scope.option.sPidRange;
        if (pid == null || pid === "") {
            $scope.pidLower = null;
            $scope.pidUpper = null;
        }
        else if (pid.indexOf("-") > 0) {
            pid = pid.split("-");
            $scope.pidLower = parseInt(pid[0]);
            $scope.pidUpper = parseInt(pid[1]);
        }
        else {
            $scope.pidLower = parseInt(pid);
            $scope.pidUpper = null;
        }
    });
}, 1500);
_

上記のコードは、デバウンスされた関数_$scope.parsePid_を返します。 4行目で、_$scope.option.SPidRange_の値を取得し、それを関数で使用していることに注意してください。この方法で取得するのではなく、どういうわけかこのパラメーターを渡したいのです。

私はこのような関数を呼び出します:

_$scope.$watch("option.sPidRange", function (pid) {
    if (pid !== null) {
        $scope.parsePid();
    }
});
_

ここで、値pidは_$scope.parsePid_と等しくなければなりません

このpidの値をデバウンスされた関数に渡したいのですが、これを行う方法がわかりません。いくつかの方法を試しましたが、デバウンス関数でエラーが発生します。

デバウンスされたfunction $scope.parsePid()にパラメーターを渡すことは可能ですか?

18
user1943020

更新

関数に引数を渡す必要があります:_.debounce(function (pid) {

デバウンスの例

$scope.parsePid = _.debounce(function(pid){
  $scope.$apply(function(){
    if (pid === null || pid === "") {
      $scope.pidLower = null;
      $scope.pidUpper = null;
    } else if (pid.indexOf("-") > 0) {
      pid = pid.split("-");
      $scope.pidLower = parseInt(pid[0],10);
      $scope.pidUpper = parseInt(pid[1],10);      
    } else {
      $scope.pidLower = parseInt(pid,10);
      $scope.pidUpper = null;
    }      
  });
},1500);

組み込みの$ timeoutを使用します

$ timeoutの例

var promise;

$scope.parsePid = function(pid){
  $timeout.cancel(promise);
  promise = $timeout(function(){     
    if (pid === null || pid === "") {
      $scope.pidLower = null;
      $scope.pidUpper = null;
    } else if (pid.indexOf("-") > 0) {
      pid = pid.split("-");
      $scope.pidLower = parseInt(pid[0],10);
      $scope.pidUpper = parseInt(pid[1],10);      
    } else {
      $scope.pidLower = parseInt(pid,10);
      $scope.pidUpper = null;
    }
  },1500);
};
11
Ilan Frumer