javascript - 如何在延迟 2 秒后触发 $watch 或执行范围订阅属性的最后一个条件?

标签 javascript angularjs timeout delay

我有一个触发 watch 的搜索输入,然后向 DB 发送一个新请求

var timeoutPromise;
var delayInMs = 2000;
$scope.$watch('search', function() {
    $timeout.cancel(timeoutPromise); 
    timeoutPromise = $timeout(function(){ 
        $scope.nameFilter = '&filter[]=Name,cs,' + $scope.search;
        $scope.updatePage(1);
    });
}, delayInMs);

延迟的主要目标是触发 watch 不是在搜索输入中的每个新字符上,而是在修改至少几个字母之后。

不幸的是,这个 watch 只是把所有的请求放在一个队列中,并在延迟之后执行所有的请求。

请帮帮我

最佳答案

Angular 内置了类似这样的东西,只是方式略有不同。 我建议这样做,延迟更改的部分在 ng-model-options 中。

JS

$scope.search = "";

$scope.searchFunction = function(){ 
    $scope.nameFilter = '&filter[]=Name,cs,' + $scope.search;
    $scope.updatePage(1);
}

HTML

<input type="text" ng-model="search" ng-change="searchFunction()" ng-model-options="{ debounce: 2000 }" />

您可能还想利用输入类型搜索

关于javascript - 如何在延迟 2 秒后触发 $watch 或执行范围订阅属性的最后一个条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42902605/

相关文章:

java - apache commons httpclient 4.3.5 通过 http 代理

javascript - 与 jQuery 条件选择器作斗争

javascript - 这种情况适合 $q 吗?

mysql - 使用旧的 generator-angular-fullstack 版本

c# - 在 HttpWebRequest 上设置 cookie 容器会导致超时,但帖子仍然会通过

time - 为什么这个 Golang 代码不能在多个时间之间进行选择。 channel 工作后?

javascript - 使用 ui-routing 在 Angular 中路由怪异

javascript - div id 中的连字符导致 javascript 错误

javascript - 如何重新启用点击事件?

html - 使用 ng-repeat 时为表格中不存在的空格制作边框