Vue.js文档建议使用lodash的debounce函数来消除昂贵的方法,这些方法已经成功实现。但是偶然地,我不想立即采取行动,Lodash的文档说:
去抖动功能带有取消方法来取消延迟的函数调用,并带有刷新方法来立即调用它们。
但是就是这样。没有信息如何调用flush方法。我找到了this博客文章,但不确定如何在Vue.js组件中实现它。
这是我目前在Vue.js组件中的内容(codepen):
<template>
<input type='text' @keyup="change" @keyup.enter="changeNow">
</template>
<script>
export default {
name: "MyComponent",
methods: {
change: _.debounce(function() {
console.log("changing...");
}, 250),
changeNow: function() {
this.change();
this.change.flush();
}
}
};
</script>
change
已正确消除抖动,并且按预期仅在键入后运行一次。但是,changeNow
会引发以下错误:
未捕获的TypeError:this.change.flush不是函数
任何有关如何实施此建议的建议将不胜感激!
答案 0 :(得分:4)
由于vue处理“方法”部分的方式出现古怪,您遇到了问题。
默认情况下,Vue仅希望方法列表中的函数为,然后它循环遍历这些方法并对其调用.bind
以确保this
始终有效。 < / p>
由于这种循环,您只能访问该函数本身,而不能访问这些函数的其他成员。
如果将change方法添加到数据部分,则可以访问其属性并调用flush方法:
var app = new Vue({
el: "#app",
data: {
change: _.debounce(function() {
console.log("changing...");
}.bind(this), 1000),
},
methods: {
changeNow: function() {
this.change.flush();
}
}
});
答案 1 :(得分:2)