我设置了一个监视表达式,用于监视输入到由$ 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发生变化,就会有更多的函数被调用,并且会有一些繁重的处理。结果是我必须在输入数字之间等待很短的时间。
有没有办法可以为此添加某种超时,以便在输入输入字段的信息没有改变三秒钟之前,监视功能代码不会改变任何内容?
答案 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。