如何延迟更改与<input />字段关联的监视变量

时间:2013-11-26 15:41:31

标签: angularjs

我设置了一个监视表达式,用于监视输入到由$ 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发生变化,就会有更多的函数被调用,并且会有一些繁重的处理。结果是我必须在输入数字之间等待很短的时间。

有没有办法可以为此添加某种超时,以便在输入输入字段的信息没有改变三秒钟之前,监视功能代码不会改变任何内容?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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