当直接未绑定到按钮时,去抖功能不起作用

时间:2017-10-06 20:18:56

标签: javascript jquery angular debounce

我正在尝试使用Ben Alman的debounce code。我有以下代码,但我根本没有看到任何执行。

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功能的执行情况。

我在网上找到的所有示例都实现了一个与按钮按下或类似的东西绑定的去抖功能。

1 个答案:

答案 0 :(得分:2)

您可以直接在您的onChange()方法中添加去抖动,并直接在模板中调用新创建的去抖动方法:

<强> 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>