Функция "Отказ" не работает, если она не привязана к кнопке

Я пытаюсь использовать Бен Алмана debounce код У меня есть следующий код, но я не вижу ничего выполняющегося вообще.

onChange() {
        var this_ = this
        if (this.autoRefreshOn) {
            Cowboy.debounce(function(e) {
                console.log("debounce worked");
                this_.doSomethingFunction();
            }, 250);
        }
    }

это onChange() функция запускается из multiselect коробки как это:

<ss-multiselect-dropdown (ngModelChange)="onChange($event)"></ss-multiselect-dropdown>
<ss-multiselect-dropdown (ngModelChange)="onChange($event)"></ss-multiselect-dropdown>
<ss-multiselect-dropdown (ngModelChange)="onChange($event)"></ss-multiselect-dropdown>
<ss-multiselect-dropdown (ngModelChange)="onChange($event)"></ss-multiselect-dropdown>

Когда эти флажки отмечены, они непрерывно запускаются onChange() но я не вижу никаких казней от debounce функция.

Во всех примерах, которые я нашел в сети, реализована функция debounce, которая связана с нажатием кнопки или чем-то в этом роде.

1 ответ

Решение

Вы можете добавить отклик прямо на ваш onChange() метод и вызовите вновь созданный метод debounce прямо в вашем шаблоне:

component.ts

  limitedOnChange = this.debounce(this.onChange, 250);

  onChange(event) { console.log('change detected: ', event) }

  debounce(fn, delay) {
    let timer = null;
    return function () {
      const context = this, args = arguments;
      clearTimeout(timer);
      timer = setTimeout(function () {
        fn.apply(context, args);
      }, delay);
    };
  }

component.html

  <ss-multiselect-dropdown (ngModelChange)="limitedOnChange($event)"></ss-multiselect-dropdown>
Другие вопросы по тегам