我想知道是否有可能在$scope.$watch上实现一个轻微的延迟。我有以下查询服务器的代码,所以在查询服务器之前,我想实现一个稍微延迟的时间,然后再计算query
。我注意到,如果你快速输入,它会变得混乱,并且不能发送正确的信息:
$scope.$watch("query", function () {
$scope.loading = true;
returnFactory.query($scope.query).then(function (returns) {
$scope.returns = returns;
$scope.loading = false;
});
});
发布于 2015-04-24 03:44:47
对于Ej,如果model 'query‘是Html标签或Angular指令,则可以使用ng-model-option:
<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
发布于 2013-12-05 19:07:42
我喜欢使用Lo-Dash,它提供了两个非常有用的功能:debounce和throttle,它可以做您想要的事情。假设你想要确保它每150毫秒只调用一次函数:
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版本,其中只包含throttle
和debounce
函数。
发布于 2013-12-05 18:30:19
您可以使用query
的当前值来决定何时触发调用:
$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;
});
}
});
https://stackoverflow.com/questions/20397253
复制相似问题