首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在$scope.$watch上实现延迟

在$scope.$watch上实现延迟
EN

Stack Overflow用户
提问于 2013-12-05 18:18:16
回答 4查看 21K关注 0票数 20

我想知道是否有可能在$scope.$watch上实现一个轻微的延迟。我有以下查询服务器的代码,所以在查询服务器之前,我想实现一个稍微延迟的时间,然后再计算query。我注意到,如果你快速输入,它会变得混乱,并且不能发送正确的信息:

代码语言:javascript
复制
$scope.$watch("query", function () {
    $scope.loading = true;
    returnFactory.query($scope.query).then(function (returns) {
        $scope.returns = returns;
        $scope.loading = false;
    });
});
EN

回答 4

Stack Overflow用户

发布于 2015-04-24 03:44:47

对于Ej,如果model 'query‘是Html标签或Angular指令,则可以使用ng-model-option:

代码语言:javascript
复制
<input type ng-model="query" ng-model-options="{ updateOn: 'default blur', debounce: { 'default':
 2000, 'blur': 1 } }" />

你可以在这里看到Angular文档:https://docs.angularjs.org/api/ng/directive/ngModelOptions

票数 12
EN

Stack Overflow用户

发布于 2013-12-05 19:07:42

我喜欢使用Lo-Dash,它提供了两个非常有用的功能:debouncethrottle,它可以做您想要的事情。假设你想要确保它每150毫秒只调用一次函数:

代码语言:javascript
复制
function update() {
 $scope.loading = true;
    returnFactory.query($scope.query).then(function (returns) {
        $scope.returns = returns;
        $scope.loading = false;
    });
}

$scope.$watch("query", function () {
   _.throttle(update, 150);
});

throttle函数允许您控制何时调用update函数(后缘或前缘)。

我在我的应用程序中一直使用Lo-Dash。这对我来说是一个必备的图书馆。比jQuery更有用。但是,如果您不想包含整个库,则可以创建一个自定义的Lo-Dash版本,其中只包含throttledebounce函数。

票数 7
EN

Stack Overflow用户

发布于 2013-12-05 18:30:19

您可以使用query的当前值来决定何时触发调用:

代码语言:javascript
复制
$scope.$watch("query", function (value) {

    //implement rule here for value
    //example value is at least 3 characters
    if (value && value.length > 3) {

        $scope.loading = true;
        returnFactory.query($scope.query).then(function (returns) {
            $scope.returns = returns;
            $scope.loading = false;
        });
    }
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20397253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档