在$ scope。$ watch上实施延迟

卡勒姆·瓦斯(CallumVass)

我想知道是否有可能对$ scope。$ watch实施轻微的延迟。我有以下查询服务器的内容,因此我想query在查询服务器之前先对它稍作延迟我注意到,如果您快速键入,则会感到困惑,并且不会发送正确的信息:

$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);
});

http://jsfiddle.net/4FuyY/

更新多亏了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);
    });

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章