当前位置:首页 > VUE

vue实现筛选录入

2026-02-24 13:09:52VUE

Vue实现筛选录入功能

筛选录入功能通常结合输入框和下拉选择组件,实现用户输入时动态筛选匹配项。以下是实现方法:

基础实现方案

使用Vue的v-model@input事件监听输入变化,结合计算属性或方法过滤数据:

<template>
  <div>
    <input 
      v-model="inputValue"
      @input="filterOptions"
      placeholder="输入筛选条件"
    />
    <ul v-if="filteredOptions.length">
      <li 
        v-for="option in filteredOptions" 
        :key="option.value"
        @click="selectOption(option)"
      >
        {{ option.label }}
      </li>
    </ul>
  </div>
</template>
<script>
export default {
  data() {
    return {
      inputValue: '',
      options: [
        { label: '苹果', value: 'apple' },
        { label: '香蕉', value: 'banana' },
        { label: '橙子', value: 'orange' }
      ],
      filteredOptions: []
    }
  },
  methods: {
    filterOptions() {
      this.filteredOptions = this.options.filter(option => 
        option.label.includes(this.inputValue)
      )
    },
    selectOption(option) {
      this.inputValue = option.label
      this.filteredOptions = []
    }
  }
}
</script>

使用第三方组件库

vue实现筛选录入

Element UI的el-autocomplete组件可直接实现该功能:

<template>
  <el-autocomplete
    v-model="inputValue"
    :fetch-suggestions="querySearch"
    placeholder="请输入内容"
    @select="handleSelect"
  ></el-autocomplete>
</template>
<script>
export default {
  data() {
    return {
      inputValue: '',
      options: [
        { value: 'vue', label: 'Vue' },
        { value: 'react', label: 'React' }
      ]
    }
  },
  methods: {
    querySearch(queryString, cb) {
      const results = queryString
        ? this.options.filter(option => 
            option.label.includes(queryString)
          )
        : this.options
      cb(results)
    },
    handleSelect(item) {
      console.log(item)
    }
  }
}
</script>

高级功能实现

添加防抖处理优化性能:

vue实现筛选录入

methods: {
  filterOptions: _.debounce(function() {
    this.filteredOptions = this.options.filter(option =>
      option.label.toLowerCase().includes(this.inputValue.toLowerCase())
    )
  }, 300)
}

样式优化

为下拉列表添加基础样式:

ul {
  list-style: none;
  padding: 0;
  margin: 0;
  border: 1px solid #ddd;
  max-height: 200px;
  overflow-y: auto;
}
li {
  padding: 8px 12px;
  cursor: pointer;
}
li:hover {
  background-color: #f5f5f5;
}

注意事项

  • 对于大数据量考虑虚拟滚动优化性能
  • 移动端需注意触摸事件处理
  • 可添加键盘导航支持(上下箭头选择)
  • 考虑添加无匹配项时的提示信息

标签: vue
分享给朋友:

相关文章

vue实现管道

vue实现管道

Vue 中实现管道(Pipe)功能 在 Vue 中可以通过过滤器(Filters)或计算属性(Computed Properties)实现类似管道的功能,将数据经过多个处理步骤后输出。 使用过滤器(…

vue实现全景

vue实现全景

Vue 实现全景效果的方法 使用 Vue 实现全景效果通常需要结合第三方库或框架,以下是几种常见的方法: 使用 Three.js 和 Vue-Three.js Three.js 是一个强大的 3D…

vue 实现关闭

vue 实现关闭

Vue 实现关闭功能的方法 在Vue中实现关闭功能通常涉及组件销毁、模态框隐藏或路由跳转等场景。以下是几种常见实现方式: 销毁当前组件 使用v-if或v-show控制组件显示/隐藏,适用于局部组件:…

vue实现mouseout

vue实现mouseout

Vue 实现 mouseout 事件的方法 在 Vue 中实现 mouseout 事件可以通过多种方式完成,以下是几种常见的方法: 使用 v-on 指令 Vue 提供了 v-on 指令(或简写为 @…

vue下载实现

vue下载实现

Vue 下载实现方法 在 Vue 项目中实现文件下载功能可以通过多种方式完成,以下是几种常见的方法: 使用 <a> 标签实现下载 通过动态创建 <a> 标签并设置 href…

vue实现计数

vue实现计数

Vue 实现计数功能 在 Vue 中实现计数功能可以通过多种方式完成,以下是几种常见的方法: 使用 Vue 数据绑定和事件监听 通过 Vue 的数据绑定和事件监听,可以轻松实现计数功能。以下是一个简…