angularjs - 在$ scope。$ watch上实现延迟

标签 angularjs

我想知道是否有可能对$ 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);
    });

关于angularjs - 在$ scope。$ watch上实现延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20397253/

相关文章:

javascript - 在 HTML 标签上动态插入 angularJS contextMenu

javascript - AngularJS - 按钮 - 在依赖之前调用函数或指令

angularjs - 未提供任何项目时隐藏 Angular ngGrid

javascript - Angular js 服务/工厂属性行为

javascript - 日期选择器未使用 Angular JS 进行清理

javascript - 相同的 Controller 并解析不同的状态

javascript - 如何在 angularjs 中通过 npm 安装 angular-ui-bootstrap?

javascript - 用于静态网页的 AngularJS SEO(S3 CDN)

javascript - 在 jqxGrid 中渲染 AngularJS 指令

angularjs - 上传到服务器之前是否可以重命名文件?