我想知道是否有可能在$范围上实现轻微的延迟。我有以下内容查询服务器,所以我想在查询服务器之前评估查询,稍微延迟一点。我注意到,如果你快速键入,它会变得困惑,不会发送正确的信息:
$scope.$watch("query",function () { $scope.loading = true; returnFactory.query($scope.query).then(function (returns) { $scope.returns = returns; $scope.loading = false; }); });
通常我会说这个延迟使用angular的$ timeout,但你不能清除这个超时。
//编辑:你可以
设置一个超时并清除它,如果这个观察者得到足够快的触发。
喜欢这个:
var timeoutCode; var delayInMs = 2000; $scope.$watch("query",function(query) { clearTimeout(timeoutCode); //does nothing,if timeout alrdy done timeoutCode = setTimeout(function(){ //Set timeout $scope.loading = true; returnFactory.query(query).then(function(returns) { $scope.returns = returns; $scope.loading = false; }); },delayInMs); });
更新感谢stewie
这可以用angular的$ timeout来实现。
var timeoutPromise; var delayInMs = 2000; $scope.$watch("query",function(query) { $timeout.cancel(timeoutPromise); //does nothing,if timeout alrdy done timeoutPromise = $timeout(function(){ //Set timeout $scope.loading = true; returnFactory.query(query).then(function (returns) { $scope.returns = returns; $scope.loading = false; }); },delayInMs); });