模拟百度输入框封装一个输入框组件,要求自带防抖及节流功能,能实时显示输入字段的查询结果
时间: 2023-10-07 22:10:22 浏览: 133
以下是一个简单的实现:
```vue
<template>
<div>
<input type="text" v-model="inputValue" @input="handleInput" />
<ul v-if="showResults">
<li v-for="(result, index) in results" :key="index">{{ result }}</li>
</ul>
</div>
</template>
<script>
import debounce from 'lodash.debounce';
import throttle from 'lodash.throttle';
export default {
data() {
return {
inputValue: '',
results: [],
showResults: false,
};
},
methods: {
handleInput: debounce(function() {
this.showResults = true;
const query = this.inputValue.trim();
if (query === '') {
this.results = [];
this.showResults = false;
return;
}
// 此处为模拟查询结果
this.results = ['结果1', '结果2', '结果3'].filter(result =>
result.includes(query),
);
}, 300),
handleInputThrottled: throttle(function() {
// 可选节流函数
}, 500),
},
};
</script>
```
该组件引入了 `lodash` 库中的 `debounce` 和 `throttle` 函数来实现防抖和节流功能。`handleInput` 方法使用 `debounce` 包装,以确保用户输入停顿一段时间后才会触发查询。`handleInputThrottled` 方法使用 `throttle` 包装,以确保在一定时间内只会执行一次,以避免过度频繁的查询。你可以根据实际需求选择使用其中一个或两个函数。组件的 `results` 数据项存储查询结果,`showResults` 控制是否显示结果列表。在实现中,当用户输入为空时,将隐藏结果列表。
阅读全文