An gularJS 1.3+
Dal AngularJS 1.3 si può utilizzare la proprietà debounce
ngModelOptions
prevede il raggiungimento di tale molto facile senza usare $timeout
a tutti. Ecco un esempio:
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);
};
}
]);
- oppure -
Check the Fiddle
Prima AngularJS 1.3
Dovrete usare $ timeout per aggiungere un ritardo e, probabilmente, con l'uso di $ timeout.cancel (previoustimeout) si può annullare qualsiasi timeout precedente ed eseguire il nuovo (aiuta a prevenire il filtraggio da eseguire multipla volte consecutovely all'interno di un intervallo di tempo)
Ecco un esempio:
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);
}
});
Basta usare un '$ timeout' per 500ms. '$ scope.FilterByName = function() {$ timeout (_filterByName, 500)' – PSL
@PSL dove nella funzione? Voglio solo eseguire la ricerca una volta. Se lo compenso, creerà un ritardo maggiore e effettuerò più ricerche. – MGot90
Sì, nella tua funzione. il commento precedente ha uno snippet. Puoi usare '$ timeout.cancel (timeoutpromise)' se un timeout è in corso e viene attivato un altro cambiamento. – PSL