2017-10-06 32 views
1

我正尝试使用Ben Alman的debouncecode。我有下面的代码,但我没有看到任何执行。直接没有绑定到按钮时防抖功能不起作用

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函数,它绑定到一个按钮按钮或类似的东西。

+0

我真的不明白你为什么要用jQuery f或者这个而不是Rxjs,这是Angular最强大的方面之一。 –

+0

我对RxJS目前还不太熟悉,我使用'jQuery'非常简单。 – summerNight

回答

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> 
+0

你的代码只是增加延迟或像Ben Alman的debounce一样工作? – summerNight

+0

这是一个完全消除。防止呼叫超过N ms,其中N是延迟。 –

+0

当多次拨打电话时,是否可以稍微改变它来消除所有的问题?并且只允许1个且只有1个对该功能进行的调用通过?我不确定'debounce'是否适合这种修改后的行为。 – summerNight