当前位置:首页 > VUE

vue 搜索框列表实现

2026-01-20 03:07:52VUE

Vue 搜索框列表实现

在 Vue 中实现搜索框列表功能,通常涉及数据绑定、过滤和渲染列表。以下是具体实现方法:

数据绑定与搜索输入

创建 Vue 实例或组件,定义数据模型和搜索输入框:

<template>
  <div>
    <input v-model="searchQuery" placeholder="搜索..." />
    <ul>
      <li v-for="item in filteredItems" :key="item.id">
        {{ item.name }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      items: [
        { id: 1, name: '苹果' },
        { id: 2, name: '香蕉' },
        { id: 3, name: '橙子' }
      ]
    }
  },
  computed: {
    filteredItems() {
      return this.items.filter(item =>
        item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
      )
    }
  }
}
</script>

计算属性过滤

使用计算属性 filteredItems 根据搜索词过滤列表项。toLowerCase() 确保搜索不区分大小写,includes() 检查项目名称是否包含搜索词。

样式优化

为搜索框和列表添加基本样式:

<style scoped>
input {
  padding: 8px;
  width: 200px;
  margin-bottom: 10px;
}
ul {
  list-style: none;
  padding: 0;
}
li {
  padding: 5px;
  border-bottom: 1px solid #eee;
}
</style>

异步数据加载

如果数据需要从 API 获取,可以使用 created 钩子或 mounted 钩子加载数据:

export default {
  data() {
    return {
      searchQuery: '',
      items: []
    }
  },
  async created() {
    const response = await fetch('https://api.example.com/items')
    this.items = await response.json()
  },
  computed: {
    filteredItems() {
      return this.items.filter(item =>
        item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
      )
    }
  }
}

使用第三方库

对于更复杂的搜索功能,可以集成第三方库如 Fuse.js 实现模糊搜索:

import Fuse from 'fuse.js'

export default {
  data() {
    return {
      searchQuery: '',
      items: [],
      fuse: null
    }
  },
  created() {
    this.loadItems()
  },
  methods: {
    async loadItems() {
      const response = await fetch('https://api.example.com/items')
      this.items = await response.json()
      this.fuse = new Fuse(this.items, {
        keys: ['name'],
        threshold: 0.3
      })
    }
  },
  computed: {
    filteredItems() {
      if (!this.searchQuery) return this.items
      return this.fuse.search(this.searchQuery).map(result => result.item)
    }
  }
}

性能优化

对于大型列表,考虑使用虚拟滚动(如 vue-virtual-scroller)减少 DOM 节点数量:

vue 搜索框列表实现

import { RecycleScroller } from 'vue-virtual-scroller'

export default {
  components: { RecycleScroller },
  // 其余代码相同
}
<RecycleScroller
  class="scroller"
  :items="filteredItems"
  :item-size="32"
  key-field="id"
>
  <template v-slot="{ item }">
    <div>{{ item.name }}</div>
  </template>
</RecycleScroller>

以上方法提供了从基础到高级的 Vue 搜索框列表实现方案,可根据项目需求选择适合的方式。

标签: 列表vue
分享给朋友:

相关文章

实现.vue文件

实现.vue文件

创建.vue文件的基本结构 一个标准的.vue文件包含三个部分:模板(template)、脚本(script)和样式(style)。这种结构允许开发者在一个文件中管理组件的HTML、JavaScrip…

vue实现token

vue实现token

Vue 中实现 Token 认证的方法 在 Vue 中实现 Token 认证通常涉及前端与后端的交互,包括 Token 的获取、存储、发送和刷新等操作。以下是具体实现步骤: 获取 Token 用户登…

vue tab实现

vue tab实现

Vue Tab 实现方法 使用动态组件实现 Tab 在 Vue 中可以通过动态组件 <component :is="currentTab"> 结合 v-for 和 v-bind 实现 Ta…

vue实现看板

vue实现看板

Vue 实现看板功能 使用 Vue 实现看板功能可以通过组件化开发、状态管理和拖拽库结合完成。以下是一个完整的实现方案: 基础项目结构 src/ ├── components/ │ ├── Ka…

vue 实现脚本

vue 实现脚本

Vue 实现脚本的方法 Vue.js 提供了多种方式来实现脚本功能,包括组件内脚本、混入(Mixins)、插件(Plugins)以及自定义指令等。以下是常见的实现方式: 组件内脚本 在 Vue 单文…

vue实现多选

vue实现多选

Vue 实现多选功能 在 Vue 中实现多选功能可以通过多种方式完成,以下是常见的几种方法: 使用 v-model 绑定数组 通过 v-model 绑定到一个数组,可以实现多选功能。适用于复选框组(…