Following an answer to my question on debouncing I am wondering if vue.js and lodash
/underscore
are compatible for this functionality. The code in the answer
var app = new Vue({
el: '#root',
data: {
message: ''
},
methods: {
len: _.debounce(
function() {
return this.message.length
},
150 // time
)
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.1.6/vue.js"></script>
<script src="https://unpkg.com/[email protected]"></script> <!-- undescore import -->
<div id="root">
<input v-model="message">Length: <span>{{ len() }}</span>
</div>
indeed holds on the execution of my function when there is continuous input, but when it is finally executed after some inactivity, the input for function()
seems to be wrong.
A practical example after starting the code above:
b
) added, and no activity -- the length is updated (but wrongly, see below)It looks like the function is ran on the last but one value of message
.
Could it be that _.debounce
handles the vue.js data
before it is actually updated with the <input>
value?
Notes:
lodash
and underscore
, with the same results (for both debounce
and throttle
functions).Lodash and Underscore are great modern JavaScript utility libraries, and they are widely used by Front-end developers.
Using Lodash in Vue The typical way to start using Lodash in your Vue application is to import the needed function on a Vue component basis.
Lodash is one of those handful of libraries, that were created to solve a growing problem, that fortunately due to Microsoft's foresight, no longer exists.
The _. debounce() method of Function in lodash is used to create a debounced function which delays the given func until after the stated wait time in milliseconds have passed since the last time this debounced function was called.
Here's an improved version of @saurabh's version.
var app = new Vue({
el: '#root',
data: {
message: '',
messageLen: 0
},
methods: {
updateLen: _.debounce(
function() {
this.messageLen = this.message.length
}, 300)
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.1.6/vue.js"></script>
<script src="https://unpkg.com/[email protected]"></script> <!-- undescore import -->
<div id="root">
<input v-model="message" v-on:keyup="updateLen">Length: <span>{{ messageLen }}</span>
</div>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With