Pete BD a donné un bon départ pour l'anti-rebond service, cependant, je vois deux problèmes:
- retourne lorsque vous devez envoyer à un travail() rappel qui utilise javascript fermeture si vous avez besoin de changer d'état en l'appelant.
- délai d'attente variable n'est pas que le délai d'attente variable d'un problème? timeout[] peut-être? imaginez 2 à l'aide de directives anti-rebond - signalr, entrée validateur de formulaire, - je crois que l'usine approche était en panne.
Ce que je suis actuellement en utilisant:
J'ai changé d'usine, de service, de sorte que chaque directive obtient une NOUVELLE instance de l'anti-rebond aka nouvelle instance du délai variable. - je n'ai pas couru dans une situation où 1 directive aurez besoin de délai d'attente pour être timeout[].
.service('reactService', ['$timeout', function ($timeout) {
var timeout;
this.Debounce = function (func, wait, immediate) {
var context = this, args = arguments;
var later = function () {
timeout = null;
if (!immediate) {
func.apply(context, args);
}
};
var callNow = immediate && !timeout;
if (timeout) {
$timeout.cancel(timeout);
}
timeout = $timeout(later, wait);
if (callNow) {
func.apply(context, args);
}
};
}]);
dans mon angularjs à distance du programme de validation
.directive('remoteValidator', ['$http', 'reactService', function ($http, reactService) {
return {
require: 'ngModel',
link: function (scope, elm, attrs, ctrl) {
var work = function(){
//....
};
elm.on('blur keyup change', function () {
reactService.Debounce(function(){ scope.$apply(work); }, 1000, false);
});
}
};
}])