項目中有個功能需要對話框輸入內容后1秒執行請求獲取模糊查詢內容,為什么不即時查詢呢?因為模糊查詢東西很多呀,實時查詢太耗性能了,所以改成當用戶停止輸入 1 秒后,再對用戶輸入的內容進行請求模糊查詢。
實現起來其實很簡單,定時器,設置1秒的請求,如果內容改變再1秒內,那么就清空,1秒后則自動執行請求。
下面來看demo:
<div ng-controller='myCtrl'> <input ng-model="iValue" ng-change="valueChange(iValue)"> </div> <script> angular.module("myApp",[]) .controller("myCtrl",function($scope, $timeout){ $scope.timer = null; $scope.valueChange = function (value) { $scope.iValue = value; $timeout.cancel($scope.timer); $scope.timer = $timeout(function () { alert($scope.iValue); }, 1000); } }) </script>
這里我用的是 angular框架,不過思路是相同的,valueChange 方法中首先會清除一次定時器,這是為了如果他連續輸入,那么間隔只要在 1 秒以下,就會一直清除定時器,不會執行定時器定義的程序,當 1 秒后,輸入框內容未改變,那么最后一次改變創建的定時器則不會被清除,這樣就可以向后台發送數據啦~