我正在使用带有 buefy、axios 和 loadash 的 Vuejs cdn,我正在尝试使用 _.debounce,因此我不会使用 Buefy 自动完成调用 API 太多时间并发送一个查询,我已经让它工作了,但是当我不使用去抖动时,自动完成没有显示结果,所以我的部分如下:
自动完成 HTML:
<b-autocomplete
v-model="AirportDestinationName"
:data="airports"
placeholder="Ciudad de destino"
field="code"
icon="map-marker-alt"
:loading="isFetching"
@input="getAsyncData(AirportDestinationName)"
@select="option => AirportDestinationSelected = option">
<template slot-scope="props">
<strong>(@{{ props.option.code }})</strong> - @{{props.option.name}} -
@{{props.option.country_name}}
</template>
</b-autocomplete>
我的没有去抖动的方法正在工作:
getAsyncData(query) {
if(query.length>1){
this.airports = []
this.isFetching = true
axios.get(`https://iatacodes.org/api/v6/autocomplete?api_key=xxxxxxxxsomekeyxxxxxxxxxxxxxxxx&query=${query}`)
.then(data => {
data.data.response.airports.forEach((item) => this.airports.push(item))
this.isFetching = false
})
.catch(error => {
this.isFetching = false
throw error
})
}
}
然后我使用 debounce 函数,但是当我使用它替换另一个函数时,自动完成不会生成下拉列表,这很奇怪,因为该示例与我使用的相同:
GotoDeb: _.debounce((query)=>{
console.log(query)
this.airports = []
this.isFetching = true
axios.get(`https://iatacodes.org/api/v6/autocomplete?api_key=xxxxxxxxsomekeyxxxxxxxxxxxxxxxx&query=${query}`)
.then(data => {
data.data.response.airports.forEach((item) => this.airports.push(item))
this.isFetching = false
})
.catch(error => {
this.isFetching = false
throw error
})
console.log(this.airports)
console.log('fetched')
},500)
其他一切都在工作,我没有从服务器或客户端收到任何错误,即使我 console.log 从 API 获取的机场,它们在那里,axios 函数工作!
编辑:
问题出在我使用的箭头函数上,当您使用通常使用()=>
的箭头函数时this
,它不会保留,而是this
仅来自该新函数。