当前位置:首页 > 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中实现贴图功能通常涉及将图片动态添加到指定位置或元素上。以下是几种常见实现方式: 使用v-bind动态绑定图片 通过数据驱动的方式动态更换图片源: <tem…

vue实现效果

vue实现效果

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

vue的实现

vue的实现

Vue 的实现原理 Vue 是一个渐进式 JavaScript 框架,其核心实现主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是 Vue 实现的主要技术细节。 响应式系统 Vue 的响…

vue实现异步

vue实现异步

Vue 实现异步操作的常见方法 Vue 提供了多种方式来处理异步操作,包括数据获取、事件处理等场景。 使用 async/await 在 Vue 方法中可以直接使用 async/await 语法处理…

通过vue实现

通过vue实现

Vue 实现方法 安装 Vue 确保已安装 Node.js 和 npm,通过以下命令安装 Vue CLI: npm install -g @vue/cli 创建 Vue 项目 使用 Vue CLI…

vue实现切换

vue实现切换

Vue 实现切换功能的方法 在 Vue 中实现切换功能可以通过多种方式实现,以下是一些常见的方法: 使用 v-if 和 v-else 指令 通过条件渲染实现切换功能,适用于简单的显示/隐藏场景…