我正在做一个具有ng-model findSearchValue的超类型样式表单,当用户键入输入时,我会观察它,并在更新时触发搜索功能。我遇到的问题是,当用户键入一个单词(例如Spaceship)时,该功能会触发9个对Spaceship的请求;单词中的每个字母1。
我尝试使用超时,但是所有这些操作都是等待900ms,然后触发所有9个请求。可以确保仅在用户停止键入给定时间后才触发请求。
这是我当前的代码:
$scope.findSearchValue = '';
$scope.getFindResults = function(findSearchValue) {
if ($scope.findSearchValue.length > 2) {
$timeout(function(){
$http.get('/search.json?term=' + $scope.findSearchValue).success(function(data) {
$scope.findResults = data;
$scope.showSearchResults = true;
});
}, 900);
} else {
$scope.showSearchResults = false;
}
};
$scope.$watch('findSearchValue', function(newValue, oldValue) {
if (newValue !== oldValue) {
$scope.getFindResults();
}
});
另外,我知道有很多处理此用例的指令。我不希望安装大指令只是为了做那么小的事情。谢谢
听起来好像您想消除抖动。您应该删除多余的$timeout
代码,然后执行以下操作:
ng-model-options="{ debounce: 900 }"
在元素上。
编辑:如下文注释中所述,以上要求使用Angularjs 1.3。如果您需要防抖动但无法升级angularjs安装,请尝试执行以下操作:github.com/shahata/angular-debounce
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句