我正在尝试使用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
功能的执行情况。
我在网上找到的所有示例都实现了一个与按钮按下或类似的东西绑定的去抖功能。
答案 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>