[英]Using Vue.js how to you flush a method that is debounced with lodash?
Vue.js 文檔建議使用 lodash 的 debounce 函數來消除昂貴的方法,我已經成功實現了。 但有時我不想立即采取行動,lodash 的文檔說:
debounced 函數帶有一個取消延遲函數調用的取消方法和一個立即調用它們的刷新方法。
但就是這樣。 沒有關於如何調用 flush 方法的信息。 我找到了這篇博文,但我不確定如何在 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 不是函數
任何有關如何實現這一點的建議將不勝感激!
由於 vue 處理方法部分的方式存在怪癖,您遇到了問題。
默認情況下,Vue 只需要方法列表中的函數,然后循環遍歷這些方法並在它們上調用.bind
以確保this
始終有效。
因為這種循環,您只能訪問函數本身,而不能訪問這些函數具有的其他成員。
如果將 change 方法添加到數據部分,則可以訪問其屬性並調用 flush 方法:
var app = new Vue({
el: "#app",
data: {
change: _.debounce(function() {
console.log("changing...");
}.bind(this), 1000),
},
methods: {
changeNow: function() {
this.change.flush();
}
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.