这有几个问题:
正确传递函数
当你试图传递这样的函数时:this.getBackendItems(page) 你正在运行它,所以_.debounce 没有接收到函数,但是函数的结果,在这种情况下,是一个 Promise 对象。
-
this.getBackendItems传函数
-
this.getBackendItems(page) 运行函数,并传递结果
但是,你如何告诉它使用哪些参数?
正确调用去抖函数
好吧,_.debounce() 返回您的原始函数,但包含去抖动逻辑。因此,您将其缓存在一个变量中并使用您想要的参数 (page) 执行该函数。所以使用 debounce 的语法正确的方式应该是这样的:
getItems: function(page){
this.page = page;
console.log(typeof(this.getBackendItems));
var debouncedFunction = _.debounce(this.getBackendItems.bind(this), 500); // properly bind the function so "this" is the vue component.
debouncedFunction(page)
},
正确的函数去抖动
但是,这也行不通,因为getItems 本身没有去抖动,所以这段代码要做的就是创建很多很多去抖动的函数,一旦 500ms 结束,它们都会触发开始。不是一个好主意。
现在我的问题是:你如何调用这个函数?从 v-on:click?然后 Vue 为您服务:
使用 Vue 的去抖动过滤器
<a v-on:click="getItems(page) | debounce 500">Some Link</a>
使用该过滤器,您根本不需要使用_.debounce。
如果您以其他方式调用此函数,请告诉我。
编辑:由于评论反馈而更新:
debounce 函数同时计算 debounce 次数
<a href="#"
@click.prevent="getItems(page) | debounce 500"
@click="pageBuffer = pageBuffer +1">
Click Me
</a>
JS:
var App = new Vue({
el: '#app',
data() {
return {
page: 1,
pageBuffer: 0
}
},
methods: {
getItems: function(page) {
this.getBackendItems(page + this.pageBuffer)
this.pageBuffer = 0
}
}
})