当前位置:首页 > VUE

vue实现搜索列表

2026-02-11 03:36:38VUE

Vue实现搜索列表的方法

数据绑定与列表渲染

使用v-model绑定搜索输入框,通过v-for渲染列表。示例代码:

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

计算属性处理过滤逻辑

通过计算属性filteredList实现实时搜索过滤:

vue实现搜索列表

computed: {
  filteredList() {
    return this.items.filter(item => 
      item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
    )
  }
}

数据准备

data中初始化数据和搜索词:

data() {
  return {
    searchQuery: '',
    items: [
      { id: 1, name: '苹果' },
      { id: 2, name: '香蕉' }
    ]
  }
}

异步数据加载

结合axios实现异步数据获取:

vue实现搜索列表

methods: {
  async fetchData() {
    const response = await axios.get('/api/items')
    this.items = response.data
  }
},
created() {
  this.fetchData()
}

性能优化

对于大数据量场景,可添加防抖处理:

import { debounce } from 'lodash'
methods: {
  search: debounce(function() {
    // 过滤逻辑
  }, 300)
}

样式增强

添加加载状态和空状态提示:

<template>
  <div v-if="loading">加载中...</div>
  <div v-else-if="filteredList.length === 0">无匹配结果</div>
</template>

完整组件示例

<template>
  <div>
    <input 
      v-model="searchQuery" 
      @input="handleSearch"
      placeholder="输入关键词搜索"
    >
    <ul v-if="!loading">
      <li 
        v-for="item in filteredList" 
        :key="item.id"
        @click="selectItem(item)"
      >
        {{ item.name }} - {{ item.price }}
      </li>
    </ul>
    <p v-if="loading">搜索中...</p>
    <p v-if="!loading && filteredList.length === 0">
      没有找到匹配项
    </p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      items: [],
      loading: false
    }
  },
  computed: {
    filteredList() {
      const query = this.searchQuery.toLowerCase()
      return this.items.filter(item =>
        item.name.toLowerCase().includes(query) ||
        item.description.toLowerCase().includes(query)
      )
    }
  },
  methods: {
    async handleSearch() {
      this.loading = true
      await this.$nextTick()
      this.loading = false
    },
    selectItem(item) {
      this.$emit('item-selected', item)
    }
  }
}
</script>

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

相关文章

vue实现图库

vue实现图库

Vue 实现图库的基本方法 使用 Vue 实现图库功能可以通过多种方式完成,以下是一些常见的方法和实现步骤。 使用 Vue 和第三方库(如 Vue Gallery) 安装 vue-gallery 或…

vue实现radio

vue实现radio

Vue 实现 Radio 按钮 在 Vue 中实现 Radio 按钮可以通过 v-model 进行数据绑定,结合 input 元素的 type="radio" 属性。以下是一个基本示例: <t…

vue实现popover

vue实现popover

Vue 实现 Popover 的方法 使用第三方库(如 Element UI、Ant Design Vue) 许多成熟的 UI 库已经内置了 Popover 组件,可以直接调用。 Element U…

vue实现侧导航

vue实现侧导航

Vue 实现侧边导航 使用 Vue 实现侧边导航可以通过多种方式完成,以下是一种常见的实现方法,结合 Vue Router 和动态组件。 基础结构 创建侧边导航栏的基本结构,通常使用 <ul&…

vue实现文章滚动

vue实现文章滚动

Vue 实现文章滚动效果 使用 CSS 实现基础滚动 通过 CSS 的 overflow 和 height 属性控制滚动区域,适用于静态内容滚动。在 Vue 模板中定义固定高度的容器,内容超出后自动滚…

vue实现天猫

vue实现天猫

Vue实现天猫首页功能 使用Vue.js实现类似天猫的电商首页需要结合多个技术点,包括组件化开发、路由管理、状态管理、API调用等。以下是关键实现步骤: 项目初始化 创建Vue项目并安装必要依赖:…