2013-11-26 32 views
0

我建立一个观察表达观察的变量的变化是手表那进入一个由$ scope.pid我怎样才能延缓被绑定到<input>场

备份输入领域的一些数据
$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发生变化,就会有更多的函数被调用和一些繁重的处理。结果是我必须在输入数字之间等待很短的时间。

有没有一种方法可以为此添加某种超时,以便手表功能代码不会改变任何内容,直到输入字段中的信息没有改变三秒钟?

回答

1

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

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

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

我认为您想在进一步处理之前验证输入。而不是看pid你可以添加过滤器。在过滤器中,您可以根据某些情况更改$scope.pidLower$scope.pidUpper,这会触发您的进一步重处理。详情请参阅$filter