当前位置:首页 > 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 节点数量:

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播放倍速的方法 在Vue中实现播放倍速功能通常涉及HTML5的<video>元素或第三方播放器库。以下是几种常见实现方式: 使用原生HTML5 video元素 通过ref获取v…

vue实现微博发布动态

vue实现微博发布动态

使用Vue实现微博发布动态功能 创建Vue组件结构 新建一个WeiboPost.vue组件,包含文本框、图片上传和发布按钮: <template> <div class="w…

vue聊天实现

vue聊天实现

Vue 聊天应用实现步骤 创建 Vue 项目 使用 Vue CLI 或 Vite 初始化项目,安装必要依赖(如 Vue 3、Element UI 或 Vuetify 用于 UI 组件)。 npm c…

vue实现旋转

vue实现旋转

Vue 实现旋转效果的方法 在 Vue 中实现旋转效果可以通过多种方式完成,以下是几种常见的方法: 使用 CSS 动画 通过 Vue 的 :class 或 :style 绑定 CSS 动画实现旋转…

vue 实现菜单

vue 实现菜单

Vue 实现菜单的方法 使用 Vue 实现菜单可以通过多种方式,以下是几种常见的方法: 使用 Vue Router 实现动态路由菜单 通过 Vue Router 可以动态生成菜单,根据路由配置自动…

vue实现递归

vue实现递归

Vue 实现递归组件的方法 在 Vue 中实现递归组件通常用于处理树形结构数据(如菜单、评论列表、文件目录等)。以下是具体实现方法: 定义递归组件 通过 name 选项让组件可以递归调用自身:…