AngularJS 1.3+
Kể từ AngularJS 1.3, bạn có thể sử dụng thuộc debounce
tính được ngModelOptions
cung cấp để đạt được điều đó rất dễ dàng mà không cần sử dụng$timeout
chút nào. Đây là một ví dụ:
HTML:
<div ng-app='app' ng-controller='Ctrl'>
<input type='text' placeholder='Type a name..'
ng-model='vm.name'
ng-model-options='{ debounce: 1000 }'
ng-change='vm.greet()'
/>
<p ng-bind='vm.greeting'></p>
</div>
JS:
angular.module('app', [])
.controller('Ctrl', [
'$scope',
'$log',
function($scope, $log){
var vm = $scope.vm = {};
vm.name = '';
vm.greeting = '';
vm.greet = function greet(){
vm.greeting = vm.name ? 'Hey, ' + vm.name + '!' : '';
$log.info(vm.greeting);
};
}
]);
-- HOẶC LÀ --
Kiểm tra Fiddle
Trước AngularJS 1.3
Bạn sẽ phải sử dụng $ timeout để thêm thời gian trễ và có thể với việc sử dụng $ timeout.cancel (trước đó hết thời gian), bạn có thể hủy bất kỳ thời gian chờ nào trước đó và chạy thời gian chờ mới (giúp ngăn việc lọc được thực hiện nhiều lần một cách nhất quán trong một Khoảng thời gian)
Đây là một ví dụ:
app.controller('MainCtrl', function($scope, $timeout) {
var _timeout;
//...
//...
$scope.FilterByName = function() {
if(_timeout) { // if there is already a timeout in process cancel it
$timeout.cancel(_timeout);
}
_timeout = $timeout(function() {
console.log('filtering');
_timeout = null;
}, 500);
}
});
$timeout
trong 500ms.$scope.FilterByName = function () { $timeout(_filterByName , 500)