Угловое удаление нескольких вызовов при смене (отладка / таймеры / манипулирование временем?)
У меня есть ситуация, когда я не могу использовать debounce в HTML, как ng-model-option: {debounce:1000}
Но я хочу удалить повторные обратные вызовы для функции doCallback в моей директиве и сделать только 1 вызов в 1 с
HTML: <input ng-change="vm.GetStuff">
угловая директива:
class SuperDirective {
eventTime: any;
anotherCallWasMade: boolean;
static $inject = ['$scope', "$timeout"];
constructor($scope: angular.IScope, $timeout: ng.ITimeoutService) {
super();
...
}
GetStuff(): void {
//I've tried something like this but it didn't exactly work
if (this.eventTime == undefined) {
this.eventTime = Date.now();
this.anotherCallWasMade = true;
} else {
var currentTime = Date.now().valueOf();
var eventTime = this.eventTime.valueOf();
var sec = (Date.now().valueOf() - this.eventTime.valueOf())/1000;
if (sec <= 1) {
//If this is the first attempt after original request then we perform a search once more, if this is another request during the same second we dont do anything..
if (this.anotherCallWasMade) {
this.anotherCallWasMade = false;
this.$timeout(() => {
this.eventTime = Date.now();
this.get_Items();
}, 1000);
}
return;
}
this.anotherCallWasMade = true;
this.eventTime = Date.now();
}
this.$timeout(() => {
if (this.doCallback != null) {
// I want to call this once in 1s instead of multiple times
this.doCallback ();
}
}, 0);
}
}
может быть, есть более простой способ удалить ненужные вызовы this.doCallback()?