Методы инициализируются в контексте window, у которого нет вашего window.delay, а если и есть, то не тот.
У вас q создается через вызов метода debounce lodash.
Потом уже Vue биндит инстанс компонента.
Еще один
пропаченый вариант ( на codepen ) из
документации<script src="https://cdn.jsdelivr.net/lodash/4.13.1/lodash.js"></script>
<div id="debounce-search-demo">
<input v-model="searchQuery" placeholder="Type something">
<strong>{{ searchIndicator }}</strong>
</div>
new Vue({
el: '#debounce-search-demo',
data: {
searchQuery: '',
searchQueryIsDirty: false,
isCalculating: false,
delay: 5000
},
computed: {
searchIndicator() {
if (this.isCalculating) {
return '⟳ Fetching new results'
} else if (this.searchQueryIsDirty) {
return '... Typing'
} else {
return '✓ Done'
}
},
debouncedSearch() {
return _.debounce(this.search, this.delay)
}
},
watch: {
searchQuery: function () {
this.searchQueryIsDirty = true
this.expensiveOperation()
}
},
methods: {
// This is where the debounce actually belongs.
expensiveOperation: function(){
return this.debouncedSearch()
},
search() {
this.isCalculating = true
setTimeout(() => {
this.isCalculating = false
this.searchQueryIsDirty = false
}, 10000)
},
}
})