当前位置:首页 > 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>

使用第三方组件库

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>

高级功能实现

添加防抖处理优化性能:

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登录功能实现

Vue 登录功能实现步骤 创建登录表单组件 在 Vue 项目中创建一个登录组件,通常命名为 Login.vue。该组件包含用户名和密码输入框以及提交按钮。 <template> &l…

vue实现滚动截屏

vue实现滚动截屏

实现滚动截屏的基本思路 滚动截屏通常指对超出可视区域的长页面进行完整截图。在Vue中,可以通过结合DOM操作、Canvas绘制及第三方库实现。以下是具体方法: 使用html2canvas库实现…

vue实现轮询

vue实现轮询

实现轮询的基本方法 在Vue中实现轮询可以通过setInterval或setTimeout配合递归调用完成。轮询通常用于定期向服务器请求数据更新。 使用setInterval的简单示例: da…

vue广告实现

vue广告实现

Vue 广告实现方法 在 Vue 项目中实现广告功能可以通过多种方式完成,具体取决于广告类型和需求。以下是几种常见的实现方法: 使用第三方广告平台 许多广告平台如 Google AdSense、百…

vue实现效果

vue实现效果

以下是Vue实现常见效果的几种典型方法,分为不同场景说明: 数据绑定与响应式更新 使用v-model实现表单双向绑定: <template> <input v-model…

vue路由实现

vue路由实现

Vue 路由实现 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是 Vue Router 的基本实现步骤和核心功能。 安装 Vue Router 通过…