Angularjs 如何延迟与<;关联的监视变量的更改;输入>;领域

Angularjs 如何延迟与<;关联的监视变量的更改;输入>;领域,angularjs,Angularjs,我设置了一个监视表达式,用于监视输入到由$scope.pid备份的输入字段中的一些数据 $scope.$watch("pid", function (pid) { if (pid == null || pid === "") { $scope.pidLower = null; $scope.pidUpper = null; } else if (pid.indexOf("-") > 0) {

我设置了一个监视表达式,用于监视输入到由$scope.pid备份的输入字段中的一些数据

  $scope.$watch("pid", function (pid) {
        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);
        }
    });
它工作得很好,但是一旦pidLower或pidUpper发生变化,就会调用更多的函数和一些繁重的处理。结果是,在向输入字段输入数字之间,我必须等待很短的时间

有没有一种方法可以添加某种超时,使手表功能代码在输入字段中输入的信息三秒钟内没有变化之前不会发生任何变化?

您可以使用该服务进行此操作。将此服务注入控制器后,可以执行以下操作:

var parsePid = function() {...};

$scope.$watch("pid", function (pid) {
   if($scope.timeoutPromise) {
      $timeout.cancel($scope.timeoutPromise);
   }
   $scope.timeoutPromise = $timeout(function() {
      parsePid();
   }, 3000);  
});

我认为您希望在进一步处理之前验证您的输入。您可以添加过滤器,而不是查看
pid
。在过滤器中,您可以根据某些条件更改
$scope.pidLower
$scope.pidLower
,这将触发进一步的繁重处理。有关详细信息,请参阅